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++ - Valore di ritorno di un array dinamico di char
Forum - C/C++ - Valore di ritorno di un array dinamico di char

Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 18:32
Giovedì, 02/04/2009
Ho creato una funzione che in un percorso, ti ricava il nome del file, ad esempio se hai C:\lol\asd.txt, ti dà come valore di ritorno asd.txt. Il problema che si presenta però è particolarmente strano, perchè se prima del return faccio un printf che stampa almeno due caratteri, la variabile che ritornerà sarà corretta, se invece tolgo il printf, mi da strani caratteri alla fine :doubt:
Ecco il codice:
Codice sorgente - presumibilmente C++

  1. char *GetFileName(char *path){
  2.     register int16 tSize=GetTextLong(path);
  3.     register byte x=0;
  4.     char FileName[255];
  5.     for(int i=0;i<tSize;i++){
  6.         if (path[i]=='\\') x=i;
  7.     }
  8.     for(int i=x;i<tSize;i++){
  9.         FileName[i-x]=path[i+1];
  10.     }
  11.     printf("  ");
  12.     return FileName;
  13. }


GetTextLong ha come valore di ritorno un intero che indica quanti caratteri ci sono in un array di char.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 1:40
Venerdì, 03/04/2009
Prova a fare un flush dell'stdout prima di stampare il risultato.


Il mio blog: https://piero.dev
PM Quote
Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 14:14
Venerdì, 03/04/2009
Non sò cosa significhi fare il flush, ma facendo brevi ricerche su google ho trovato e provato ad usare l'istruzione fflush(stdout), ma senza successo...
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int GetTextLong(char * text){
  4.     register unsigned int r;
  5.     for(r=0;r<0xFFFFFFFF;r++) if(text[r]=='\0')  break;
  6.     return r;
  7. }
  8.  
  9. char *GetFileName(char *path){
  10.     short int tSize=GetTextLong(path);
  11.     char x=0;
  12.     char FileName[255];
  13.     for(int i=0;i<tSize;i++){
  14.         if (path[i]=='\\') x=i;
  15.     }
  16.     for(int i=x;i<tSize;i++){
  17.         FileName[i-x]=path[i+1];
  18.     }
  19.     fflush(stdout);
  20.     return FileName;
  21. }
  22.  
  23. int main(){
  24.     fflush(stdout);
  25.     printf("%s",GetFileName("C:\\windows\\system32\\rundll32.exe"));
  26. }



Questo è il codice sorgente completo... Please, datemi una mano :(, ho anche altri problemi di questo tipo quando devo far ritornare un'array dinamico di char :(

PM Quote