Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - strcpy non funziona come dovrebbe
Forum - C/C++ - strcpy non funziona come dovrebbe

Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 23:36
Lunedì, 14/01/2013
Salve,

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

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. typedef char* string;
  6. void main() {
  7.         string nome;
  8.         int anno;
  9.         printf("Inserire nome file: ");
  10.         scanf("%s", nome);
  11.         char path[100];
  12.         strcpy(path, "C:\\ProveC\\es.file_studenti\\asd.txt");
  13.         printf("%s", path);
  14.         printf("\n OK?");
  15. }



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:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. typedef char* string;
  6. void main() {
  7.         string nome;
  8.         int anno;
  9.         char path[100];
  10.         printf("Inserire nome file: ");
  11.         scanf("%s", &nome);
  12.         strcpy(path, "C:\\ProveC\\es.file_studenti\\");
  13.         //strcat(path, nome); <- Non funziona :/
  14.         printf("%s", path);
  15.         printf("\n OK?");
  16. }



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 il 14/01/2013 alle 23:56
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 0:23
Martedì, 15/01/2013
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.

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 8:06
Martedì, 15/01/2013
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 il 15/01/2013 alle 21:32
PM Quote