Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Politica, accademia e industria a confronto su mercato unico, sicurezza e competitività. Nei laboratori di Vimercate, Nokia ha mostrato le nuove generazioni di chip ottici e i test che ogni prodotto deve superare prima di arrivare sul mercato
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi
Abbiamo assemblato e provato la Fiido Nomads Pro, evoluzione del modello da trekking già presente nella gamma, che migliora in tutto, soprattutto grazie al motore centrale, fluido e potente. Ottima app, costruzione solida e prezzo ok completano il quadro
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Google Pixel Watch 5 ha affinato una formula già convincente con hardware più veloce, Gemini offline e nuovi strumenti per sport e benessere. Abbiamo provato la versione LTE da 41 mm, comoda anche di notte e ben proporzionata sui polsi piccoli. Il design resta un punto di forza, ma l'autonomia premia ancora il 45 mm e alcune funzioni AI non sono disponibili in Italia: ecco che cosa cambia rispetto a Watch 4 e quale formato conviene scegliere oggi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-07-2008, 11:42   #1
lodoss08
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);
	}
e ottengo

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
il risultato (come si vede anche dalla stampa) è che le 2 stringhe non coincidono (infatti la if non viene eseguita)...
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)
le stringhe stampate sono diverse, eppure la if viene eseguita. anche con strdup ottengo lo stesso. non capisco quale sia il problema. però (come segnalato nel codice di output) ci sono dei caratteri che in shell non sono visibili, mentre quando li ho incollati qui appaiono (credo siano caratteri binari, forse mi sbaglio...)

Qualcuno ha idea della soluzione?

Ultima modifica di lodoss08 : 28-07-2008 alle 11:48.
lodoss08 è offline   Rispondi citando il messaggio o parte di esso
Old 28-07-2008, 11:46   #2
lorenzo001
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
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 28-07-2008, 11:59   #3
lodoss08
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 6
Quote:
Originariamente inviato da lorenzo001 Guarda i messaggi
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
mmm... non so perchè in tutte le prove fatte finora con la strlen non ero riuscito a farlo funzionare comunque... sarà il caldo che comincia a dare alla testa!
Grazie mille per l'aiuto, ora funziona tranquillamente!
lodoss08 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
MSI PRO MAX: QD-OLED ultrawide per lavorare, creare e giocare MSI PRO MAX: QD-OLED ultrawide per lavorare, cre...
Cooler Master GPU Shield arriva in Europ...
Wolters Kluwer Tax & Accounting pote...
NVIDIA accelera il DLSS 5: il nuovo mode...
Character.ai in bancarotta, Disney pront...
realme passa a ColorOS 17 con Android 17...
OPPO presenta ColorOS 17: più flu...
Giochi PS2 su smartphone Android: ARMSX2...
Ecco il nuovo tool semplificato per alle...
OnePlus non si ferma dopo l'addio all'Eu...
Epic Games ha rinviato il gioco di Disne...
Elon Musk versa oltre 276 milioni ai rep...
AMD EPYC Verano nelle mani di Lisa Su: f...
Meta presenta la sua prima IA di frontie...
Il buco nero di NGC 1275 si accende nei ...
Aito punta all'Europa: l'azienda automot...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v