Oppure

Loading
14/01/13 22:36
GrG
Salve,

avevo un problema che non mi riesco a spiegare.. ho questo codice:


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

typedef char* string;
void main() {
	string nome;
	int anno;
	printf("Inserire nome file: ");
	scanf("%s", nome);
	char path[100];
	strcpy(path, "C:\ProveC\es.file_studenti\asd.txt");
	printf("%s", path);
	printf("\n OK?");
}


strcpy mi dovrebbe copiare la stringa passata come secondo argomento in path, eppure l'applicazone crasha.. windows infatti mi dice che a.exe ha smesso di funzionare

Quindi è come se strcpy fallisse ma proprio non mi spiego perchè, qualcuno mi può chiarire?

EDIT:

ho scoperto che mettendo:
scanf("%s", &nome);

al posto di: scanf("%s", nome);

funziona, ma come mai? nome è una variabile di tipo puntatore char, da quel che ne so non andrebbe la & poichè è un puntatore.. :-|

altro fatto strano è che volevo usare strcat subito dopo ma sia con & o senza & non funziona... esempio:
#include <stdio.h>
#include <string.h>
#include <stdio.h>

typedef char* string;
void main() {
	string nome;
	int anno;
	char path[100];
	printf("Inserire nome file: ");
	scanf("%s", &nome);
	strcpy(path, "C:\ProveC\es.file_studenti\");
	//strcat(path, nome); <- Non funziona :/
	printf("%s", path);
	printf("\n OK?");
}


Qualcuno mi potrebbe spiegare un pò meglio cosa sbaglio?

p.s. Non posso usare funzioni alternative perchè l'università mi obbliga ad usare queste
Ultima modifica effettuata da GrG 14/01/13 22:56
aaa
14/01/13 23:23
Poggi Marco
Il programma non funziona perché string è definito come un puntatore a caratteri e non hai allocato memoria in nome.
Se nel secondo caso funziona, non vuol dire che le cose vadano bene, stai utilizzando della memoria non gestita correttamente.
Se non puoi utilizzare la funzione malloc, allora dichiara un vettore statico.
aaa
15/01/13 7:06
GrG
mmm.. questa cosa l ho pensata, ma nel primo codice strcpy lo uso sull array path, quindi se io leggo da input nome non dovrebbe influenzare strcpy, eppure se levo quello scanf il programma funziona... dici che comunque è questione di malagestione della memoria?

Comunque là funzione malloc possiamo usarla.

p.s. appena ne ho l occasione farò un pò di prove e ti farò sapere, grazie dell aiuto

EDIT:
grazie mille, ora ho risolto, ho ricorretto con:
typedef char string[100];
Ultima modifica effettuata da GrG 15/01/13 20:32
aaa