Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21
  1. #11
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45
    Si la convenzione del puntatore nullo permette di verificare se il puntatore punta a qualcosa oppure no, cioè è buona norma infatti scrivere int *p=0;

    Infatti se il suo contenuto è nullo significa che non punta a nulla....
    Se io lo inizializzo a NULL non sto indicando che quel determinato puntatore non punta a nessuno?

    Facendo infatti la verifica if(p) ottengo lo stesso risultato.....

    Cioè l'obiettivo è inizialmente renderlo nullo per non utilizzarlo in maniera accidentale, effetuando poi il controllo so che gli devo assegnare un valore, lo faccio puntare a qualcosa o gli alloco una nuova zona di memoria per contenere qualcosa di speculare ad esempio....
    ivanet

  2. #12

    Re: Re: [C] assegnazione valore ad una stringa da una funzione

    Originariamente inviato da Samuele_70
    attenzione il puntatore a char 'stringa'
    deve essere inizializzato prima di essere usato !!!
    vero, nella fretta me n'ero scordato!

    ora provo ad allocare il giusto quantitativo di memoria e:
    codice:
    stringa = scelte[0]; //o come era...
    by fede089

  3. #13
    Originariamente inviato da Samuele_70
    Oppure, semplicemente :
    codice:
            char stringa[20];
            modifica(stringa);
    ho modificato char *stringa; in char stringa[20]; ma questa volta non visualizza niente...

    ps
    ho usato i codici postati all'inizio della discussione.
    by fede089

  4. #14
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    ciao, vedo che ti hanno gia consigliato come fare.
    volevo solo cercare di spiegarti perche la prima soluzione non funziona.

    Il motivo e' che in C i parametri passi alla funzione NON SONO MODIFICABILI, perche sono una COPIA del valore originario.

    tu all' inizio MODIFICAVI il puntatore, facendolo puntare a un' altra parte; con il risultato che alla fine della funzione la modifica si perde.

    invece, scrivere stringa[i] = 'X'; ad esempio e' corretto, perche tu non stai modficando il puntatore (=la variabile stringa), ma la cella di memoria a cui punta.

    Stefano
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  5. #15
    Originariamente inviato da stefanomnn
    Il motivo e' che in C i parametri passi alla funzione NON SONO MODIFICABILI, perche sono una COPIA del valore originario.

    tu all' inizio MODIFICAVI il puntatore, facendolo puntare a un' altra parte; con il risultato che alla fine della funzione la modifica si perde.
    Infatti è per questo che ho usato un puntatore, credendo di poter modificare la porzione di memoria a cui punta da dentro la funzione, ma non ho abbastanza esperienza con i puntatori...

    Originariamente inviato da stefanomnn
    invece, scrivere stringa[i] = 'X'; ad esempio e' corretto, perche tu non stai modficando il puntatore (=la variabile stringa), ma la cella di memoria a cui punta.
    è per questo che strcpy() funziona, vero?
    by fede089

  6. #16
    si, al posto di stringa=varie_str[scelta];
    ho scritto:
    codice:
          stringa[0] = 'a';
    	stringa[1] = 'b';
    	stringa[2] = '\0';
    e giustamente visualizza "ab"!

    ps
    ho lasciato nel main char stringa[10]
    by fede089

  7. #17
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    si perche strcpy non modifica direttamente il puntatore, bensi scrive nell' area da esso puntato
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  8. #18
    Originariamente inviato da fede089
    ho modificato char *stringa; in char stringa[20]; ma questa volta non visualizza niente...

    ps
    ho usato i codici postati all'inizio della discussione.
    Questa è una versione leggermete modificata del codice.
    codice:
    #include <stdio.h>
    #include <string.h>
    
    void modifica(char *stringa, int scelta )
    {
    	char *varie_str[] = { "zero", "uno", "due", "tre", "quattro" };
    	strcpy( stringa, varie_str[scelta] );
    }
    
    int main(void)
    {
    	char stringa[10];
    	modifica(stringa, 4);
    	printf("stringa = '%s'\n", stringa);
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #19
    semplice ed efficace
    by fede089

  10. #20
    Originariamente inviato da stefanomnn
    ...
    Il motivo e' che in C i parametri passi alla funzione NON SONO MODIFICABILI, perche sono una COPIA del valore originario.

    tu all' inizio MODIFICAVI il puntatore, facendolo puntare a un' altra parte; con il risultato che alla fine della funzione la modifica si perde.
    ...
    In C si possono passare i puntatori anche per riferimento...
    codice:
    #include <stdio.h>
    
    void modifica(char **stringa, int scelta)
    {
    	const char *varie_str[] = { "zero", "uno", "due", "tre", "quattro" };
    	(*stringa) = (char*)varie_str[scelta];
    }
    
    int main(void)
    {
    	char *stringa = NULL;
    	modifica( &stringa, 4);
    
    	printf("stringa = '%s'\n", stringa);
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.