MilesSmiles Δημοσ. 2 Δεκεμβρίου 2008 Δημοσ. 2 Δεκεμβρίου 2008 Καλησπέρα ξέρει κανεις πως μπορω να περάσω την newline μεσα απο την argv? Για παραδειγμα ας πουμε πως το πρόγραμμα write -string γράφει την string σε ενα αρχειο. Ψάχνω τρόπο να περναει και το newline αλλα το μόνο που γραφει στο αρχείο ειναι \n αντί να αλλάζει γραμμη write test\ntest εγω θέλω το αρχειο να ειναι test test ενώ είναι testntest Δοκίμασα και write test\\ntest και το αποτέλεσμα ειναι test\ntest
pinball_elf Δημοσ. 2 Δεκεμβρίου 2008 Δημοσ. 2 Δεκεμβρίου 2008 Λίγο δύσκολο αυτό που ρωτάς. Αυτο που συμβαίνει είναι το εξής: όταν δίνεις > $ 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'
ippo00 Δημοσ. 2 Δεκεμβρίου 2008 Δημοσ. 2 Δεκεμβρίου 2008 > #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
bokarinho Δημοσ. 3 Δεκεμβρίου 2008 Δημοσ. 3 Δεκεμβρίου 2008 Γιατί δεν χρησιμοποιείς την strstr που προσφέρει η C, ως εξής: > if(!strstr(argv[1], "\n")) .....
ippo00 Δημοσ. 3 Δεκεμβρίου 2008 Δημοσ. 3 Δεκεμβρίου 2008 Ναι, μπορεί να γραφεί και ως > 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
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.