|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
[C] Stringhe, piccolo problemino
Mi sono bloccato su una cosa che credo sia di facile risoluzione, solo che è qualche anno che non programmo in c e non mi ricordo alcune cose.
Io devo manipolare delle stringhe, l'utente inserisce delle parole e per ognuna di queste devo creare un elemento di una lista che le contiene. Posso usare lo strncpy per farlo anche se le parole sono di lunghezza diversa? Quando vado a stampare la lista le parole sono seguite dall'immondizia che c'è nella zona di memoria non occupata ma allocata della stringa, io pensavo si fermasse al /0. La struttura è semplice ed è questa: Codice:
struct elemento {
char parolaValida[20];
struct elemento *next;
struct elemento *prec;
};
Quando stampo uso il printf("%s"); Grazie. edit: ho scoperto che usando la strcpy invece della strncpy funziona bene, non vorrei però aver affrontato il problema con una logica sbagliata. Io dovrò poi estrarre la prima e l'ultima lettera delle parole e devo verificare anche che non siano inseriti caratteri non validi, prima di andare avanti vi chiedo se può andar bene leggere le stringhe con lo scanf oppure se devo per forza usare il getchar (o come si chiama) e verificare lettera per lettera. Ultima modifica di -Ivan- : 27-10-2008 alle 17:43. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non avevi copiato lo \0
Per copiare lo \0 con strncpy devi copiare un carattere in più rispetto alla lunghezza della stringa che ti ritorna strlen. Fai così: int size = (strlen(lettura) + 1 > sizeof(el->parolavalida) - 1) ? sizeof(el->parolavalida) - 1 : strlen(lettura) + 1; strncpy(el->parolavalida, lettura, size); Al momento della creazione di un nuovo elemento della stringa copia \0 in el->parolavalida[sizeof(el->parolavalida) - 1]. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:59.



















