Προς το περιεχόμενο

Newline και argv στην C


MilesSmiles

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα ξέρει κανεις πως μπορω να περάσω την newline μεσα απο την argv?

 

Για παραδειγμα ας πουμε πως το πρόγραμμα write -string γράφει την string

σε ενα αρχειο.

 

Ψάχνω τρόπο να περναει και το newline αλλα το μόνο που γραφει στο αρχείο ειναι \n αντί να αλλάζει γραμμη

 

write test\ntest

εγω θέλω το αρχειο να ειναι

test

test

 

ενώ είναι

testntest

 

Δοκίμασα και write test\\ntest

και το αποτέλεσμα ειναι test\ntest

Δημοσ.

Λίγο δύσκολο αυτό που ρωτάς. Αυτο που συμβαίνει είναι το εξής: όταν δίνεις

>
$ write test\ntest

ο χαρακτήρας '\' χρησιμοποιείται από το εκάστοτε κέλυφος ως προσωρινή διακοπή της εντολής. Δηλαδή είναι σαν να δίνεις:

>
$ write test\
   --> ntest

οπότε και σωστά παίρνεις στην έξοδο: testntest

 

'Οταν δίνεις:

>
$ write test\\ntest

τότε "λές" στο κέλυφος να αγνοήσει τον '\' οπότε το argv που σου έρχεται στην main έιναι το test\ntest.

Τι γίνεται όμως: το argv είναι στην ουσία ο παρακάτω πίνακας χαρακτήρων:

>
't', 'e', 's', 't', '[b]\'[/b], '[b]n[/b]', 't', 'e', 's', 't'

και σωστά παίρνεις στην έξοδο: test\ntest

Εσύ όμως θέλεις τον παρακάτω πίνακα χαρακτήρων:

>
't', 'e', 's', 't', '[b]\n[/b]', 't', 'e', 's', 't'

Δημοσ.

>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void strFix(int fargc,char ** fargv)

{
	int x,i;
	for(x=0; x<fargc; x++)
		for(i=0;i < strlen(fargv[x]);i++)
			if(fargv[x][i]=='\\' && fargv[x][i+1]=='n')
				{fargv[x][i]='\n';
				fargv[x][i+1]='\b';}


}

 

 

Παράδειγμα κλήσης:

 

>
int main (int argc,char**argv){
int x;

strFix(argc,argv);
for(x=1;x<argc;x++)
	printf("%s ",argv[x]);
printf("\n");
return 0;
}

 

απλά όταν τρέχεις το πρόγραμμα πρέπει να κανεις βάλεις όλα τα args se " " p.x ./prog "ahujkdhas \n asdsad\nasdasd"

Εναλλακτικά μπορέις και με \\ p.x ./prog ahujkdhas \\n asdsad\\nasdasd

 

Είναι ασφαλές υποθέτω (δείχνει να δουλέυει μια χαρά) να αντικαταστήσεις το \ me \n και το n με \b

Δημοσ.

Ναι, μπορεί να γραφεί και ως

 

>
void strFix(int fargc,char ** fargv)

{
	char * t;
	int i;
	for(i=0; i<fargc; i++)
		while(t = strstr(fargv[i],"\\n"))
			t[0]='\n',t[1]='\b';	
}


 

Αλλά μπορείς να γράψεις μια όλο τον κώδικα του παραδείγματος σου; Θέλς να δω πώς θα γινόταν με if

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...