Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C]return string

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    37

    [C]return string

    Ciao, stavo svolgendo un piccolo esercizio riguardante il passaggio di array a funzioni, ma a quanto pare non ho capito bene il concetto.
    Questo è il sorgente: http://sprunge.us/OZLA?c
    L'errore che ottengo alla compilazione è il seguete:
    codice:
    gcc -o lol lol.c
    lol.c: In function ‘copy’:
    lol.c:24: warning: return makes integer from pointer without a cast
    Qualcuno potrebbe darmi una spiegazione chiara, in modo che una volta per tutte capisco come funziona sto triangolo array-funzioni-puntatori : D

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Non c'è molto da dire ... restituisci un puntatore a char ma la funzione l'hai dichiarata in modo sbagliato (restituisce un char, non un puntatore a char)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    La tua funzione deve restituire un char *, non un char. Tieni conto che qui puoi restituire la stringa in questa maniera perché l'hai allocata con malloc (il chiamante poi la dovrà deallocare con free), ma non puoi restituire in quel modo stringhe allocate sullo stack dalla funzione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    37
    Ah, capito.
    Ora non mi da errori, ma la stringa non viene ritornata.
    Come mai?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Originariamente inviato da R.Rufino
    Ah, capito.
    Ora non mi da errori, ma la stringa non viene ritornata.
    Come mai?
    Scusa ... ma tu dove la ritorni ?

    Se scrivi

    copy(s);

    non ritorni alcunchè.

    Dovrai dichiarare nel main

    char *stringacopiata;

    e poi

    stringacopiata = copy(s);

    in modo che il puntatore venga restituito al main


    P.S. Fra l'altro, questa parte

    (strlen(word)*sizeof(int));

    è sbagliata ... dovrebbe essere

    ((strlen(word)+1)*sizeof(char));
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    37
    D'oh, giusto, che imbranato :P

    Grazie dell'aiuto

    EDIT: perchè dovrei mettere quel +1?

  7. #7
    Per il terminatore finale. Per inciso, sizeof(char) è inutile, dato che sarà sempre 1 (sizeof restituisce le dimensioni di una variabile espresse in char). Semmai, se vuoi fare il purista e salvarti da mal di fegati quando vorrai passare ai wchar_t, potresti fare sizeof(*word).
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.