Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Funzione ritornante una stringa (array di char)

    Salve a tutti, avrei bisogno un aiuto per una funzione in C che ritorni un'array di Char.
    Premesso che in C non sono molto bravo:

    Prototipo (o interfaccia):

    char* createRemoteName();

    Funzione:

    char* createRemoteName(){
    char *RemoteName="User";
    char *str;
    srand(time(0));
    int n=rand();
    itoa(n,str,10);
    strcat(RemoteName,str);
    return RemoteName;//Sarà tipo User1412, User2345, User1747, ecc..
    }

    Richiamo della funzione nel Main:

    char *RemoteName=createRemoteName();

    Mi serve per creare un nome casuale da dare a un file inviato a un server FTP tramite uno script. In compilazione nessun errore, ma in esecuzione crasha.

    Spero che mi possiate aiutare. Grazie, buona giornata a tutti :P

    edit: anche ritornare un puntatore come ho tentato di fare a metà va bene

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    La stringa str deve essere allocata per essere utilizzata.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Nella funzione in questione ci sono diversi errori gravi. Non puoi usare la strcat su RemoteName, visto che si tratta di un puntatore ad una stringa contenuta nella tabella stringhe dell'eseguibile (leggi questo post per spiegazioni in merito). Inoltre quando scrivi itoa(n,str,10); stai dicendo al computer di andare a scrivere su una locazione di memoria sconosciuta, visto che non hai inizializzato il puntatore str. Una correzione rapida potrebbe essere questa:
    codice:
    char * createRemoteName()
    {
        static char RemoteName[256];
        srand(time(0));
        _snprintf(RemoteName, sizeof(RemoteName), "User%d",rand());
        return RemoteName;
    }
    . Occhio però che la funzione in questione risulta non rientrante per via della variabile static (ma se non fosse static verrebbe restituito al chiamante l'indirizzo di una variabile locale, che però cesserebbe di esistere all'uscita della funzione); una versione migliore della funzione (in cui il buffer e le sue dimensioni sono fornite dal chiamante) può essere questa:
    codice:
    char * createRemoteName(char * buffer, size_t bufsize)
    {
        srand(time(0));
        _snprintf(buffer, bufsize, "User%d",rand());
        return buffer;
    }
    /* Esempio di come chiamarla: */
    char remoteName[256];
    createRemoteName(remoteName, sizeof(remoteName));
    /* Ora il nome è nella variabile "remoteName" */
    /* ... */
    .
    In ogni caso ti consiglio di ristudiarti per bene la gestione delle stringhe in C.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    grazie per l'aiuto,ho capito l'errore. Conoscendo un pochino di assembler e sapendo come funzionano i puntatori (ma non saperli usare) ho capito qual'è il problema. Grazie per l'aiuto..cmq mi serviva solo per questo progettino C altrimenti sono un Java Programmer, dove questo tipo di problemi non si presentano. Grazie ancora Ciao!

  5. #5
    Prego, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.