n° 219
Novembre 2017
Dicembre 13, 2017, 05:38:46 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Salvare più stringhe su una stringa C  (Letto 792 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Buzz_why
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 1


Mostra profilo
« inserita:: Giugno 23, 2017, 05:29:19 »

Buongiorno a tutti, sto facendo un programma di nome string.c e vorrei che se gli do varie stringhe da terminale lui le salvi su una variabile e la stampi. esempio: da terminale.... ./string Ciao mondo bellissimo
lui stamperà Ciao mondo bellissimo.
Io ho fatto cosi ma non mi funziona:
Codice:
int main(int argc, char *argv[]) {


char m[MAXSIZE];
for(int i=2; i <=(argc-1); i++){

strcpy (m,argv[i]);
m=m+'\0';
printf("m =%s\n", m);

printf("%s\n", argv[i]);

}

printf(" m finale =%s apposto di Ciao mondo bellissimo\n", m);
}

Qualcuno può aiutarmi?
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #1 inserita:: Giugno 23, 2017, 10:01:46 »

Non so se ho capito quello che intendi ma il codice dovrebbe essere qualcosa di simile

Codice:
#include <stdio.h>
#include <string.h>

define MAXSIZE 1000

int main(int argc, char *argv[]) {
char m[MAXSIZE] = { 0 };

for (int i = 1; i < argc; i++)
strcat(m, argv[i]);

printf(" m finale =%s apposto di Ciao mondo bellissimo\n", m);
}
Registrato
AldoBaldo
Newbie
*

Karma: +0/-4
Scollegato Scollegato

Messaggi: 28


Mostra profilo E-mail
« Risposta #2 inserita:: Giugno 23, 2017, 10:06:05 »

Codice:
#include <stdio.h> /* nel tuo listato mancava l'inclusione di questo header */
#include <string.h> /* nel tuo listato mancava l'inclusione di questo header */

#define MAXSIZE 256 /* nel tuo listato MAXSIZE non era definito */

int main( int argc, char *argv[] ) {
    char m[MAXSIZE]; /* nel tuo listato MAXSIZE non era definito */
    int i; /* non tutte le versioni del C permettono di dichiarare
              variabili direttamente nell'ambito del ciclo "for" */

for( i=2; i<=(argc-1); i++ ) { /* perche' inizi il ciclo da 2?
                                       forse intendevi partire da 1? */
                                   /* invece di i<=(argc-1) potresti usare
                                      i<argc come condizione d'uscita, che
                                      e' equivalente */
strcpy( m, argv[i] ); /* cosi' sostituisci interamente il
                                 contenuto di m ad ogni passaggio */
     /* m = m + '\0'; questa non ha senso o, almeno, non ne ho
                      capito l'intenzione... inoltre, non compila */
printf( "m = %s\n", m );    /* questa e la successiva /*
printf( "%s\n", argv[i] );  /* stampano la stessa cosa, no? */
}

/* questa ristampa l'ultima versione di m, come
  alle righe 17 e 18 (ultimo passaggio del ciclo) */
printf( " m finale = %s al posto di \"Ciao mondo bellissimo\"\n", m );

return 0; /* ci vuole sempre un valore di ritorno di tipo int */
}

La mia impressione è che tu non abbia ben centrato l'obiettivo (ammesso ch'io l'abbia capito davvero, il tuo obiettivo).

Vuoi fare in modo che il programma "legga" uno ad uno i parametri dalla linea di comando, li copi (uno alla volta, cancellando ogni volta il precedente) nell'array m[], quindi stampi a schermo il contenuto dell'array m[] stesso? In altre parole...

...ipotizzando che tu passi nella linea di comando "Ciao mondo bellissimo", al lancio di main() argc sarà impostato su 4 e argv[] conterrà quattro puntatori validi che punteranno rispettivamente al nome del file eseguibile, a "Ciao", a "mondo" e a "bellissimo". Il ciclo (che dovrebbe partire con i=1 per saltare la prima stringa in argv[], che contiene il nome del file eseguibile) al primo passaggio copierà "Ciao" in m e scriverà due volte in console "Ciao", al secondo passaggio copierà "mondo" in m e scriverà due volte in console "mondo", al terzo passaggio copierà "bellissimo" in m e scriverà due volte in console "bellissimo". Da ultimo, scriverà in console quell'ultima frase, nella quale verrà inserito il contenuto di m in uscita dal ciclo, ovvero "bellissimo".

Ho capito bene? E' questo che volevi ottenere?
Registrato

Ma cosa vuoi che ne sappia? Io col codice ci gioco, mica ci lavoro!
AldoBaldo
Newbie
*

Karma: +0/-4
Scollegato Scollegato

Messaggi: 28


Mostra profilo E-mail
« Risposta #3 inserita:: Giugno 23, 2017, 10:13:18 »

Se invece l'obiettivo è quello che ha inteso oregon (accodare su un'unica stringa le tre parole), allora si può anche usare sprintf(), così:

Codice:
int main( int argc, char *argv[] ) {
    char m[MAXSIZE] = "";
    char *p = m;
    int i;

for( i=1; i<argc; i++ )
        p += sprintf( p, "%s ", argv[i] );

printf( " contenuto finale di m = %s\n\n", m );

return 0;
}
Registrato

Ma cosa vuoi che ne sappia? Io col codice ci gioco, mica ci lavoro!
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines