|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 6
|
problemi con stringhe in c
Ciao a tutti! sto lavorando su un progetto in linguaggio c su Linux, ma ho un problema che riguarda le stringhe e non capisco perchè non funzioni.
leggo da file delle righe e le salvo in char* facenti parte di una struct, e fin qui tutto ok. (nella parte che crea problemi sono ip e port della struct p) poi vorrei creare un id dato dalla concatenazione di 2 stringhe, separate da ":" ed assegnarlo ad una variabile della struct. il codice è questo: Codice:
//id è dato da ip:port
char *tempId = calloc(1, (sizeof(p->ip) + sizeof(":") + sizeof(p->port)));
strcpy(tempId, p->ip);
strcat(tempId, ":");
strcat(tempId, p->port);
printf("tempId = %s\n"
"strlen tmpid = %d\n", tempId, strlen(tempId));
p->id = calloc(1, sizeof(tempId));
//strcpy (p->id, tempId);
//p->id = strdup(tempId);
int i;
for(i = 0; i < strlen(tempId); i++)
{
p->id[i] = tempId[i];
}
p->id[strlen(p->id)] = '\0';
printf("p->id = %s\n"
"strlen p->id = %d\n", p->id, strlen(p->id));
if (strcmp(p->id, tempId) == 0){
printf("errore di stampa\n"
"tempId = %s\n"
"p->id = %s\n"
, tempId, p->id);
}
Codice:
tempId = 127.0.1.1:1000 strlen tmpid = 14 p->id = 127.0.1.1:100 (prima dell'ultimo 0 in shell si vede uno spazio) strlen p->id = 14 nelle righe commentate ho provato anche con strcpy, ed ottengo Codice:
tempId = 127.0.1.1:1000 strlen tmpid = 14 p->id = 127.0.1.1:10 (in shell l'ultimo carattere non si vede) strlen p->id = 13 errore di stampa tempId = 127.0.1.1:10 (in shell l'ultimo carattere non si vede) p->id = 127.0.1.1:10 (in shell l'ultimo carattere non si vede) Qualcuno ha idea della soluzione? Ultima modifica di lodoss08 : 28-07-2008 alle 12:48. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Attenzione ad usare la sizeof come se fosse la strlen ... sono cose diverse ...
char *tempId = calloc(1, strlen(p->ip) + strlen(":") + strlen(p->port) + 1); e non dimenticare un altro carattere per il terminatore |
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 6
|
Quote:
Grazie mille per l'aiuto, ora funziona tranquillamente! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:22.




















