Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [C] assegnazione valore ad una stringa da una funzione

    Ho 3 files:

    main.c
    Codice PHP:
    #include <stdio.h>
    #include "file_esterno.h"

    int main(void) {
            
    char *stringa;
            
    modifica(stringa);
            
            
    printf("%s\n"stringa);
              return 
    0;


    file_esterno.h
    Codice PHP:
    #include <string.h>
    #include <stdio.h>

    void modifica(char *stringa); 

    file_esterno.c
    Codice PHP:
    #include "file_esterno.h"

    void modifica(char *stringa) {
        
    char *varie_str[2] = { "uno""due" };
        
    int scelta 0;
        
        
    stringa varie_str[scelta];


    Vorrei modificare char *stringa dalla funzione modifica(), ma il codice postato non funziona, sapreste indicarmi dove sbaglio?

    Grazie anticipatamente.
    by fede089

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45
    Non sono sicuro ma forse dovresti utilizzare la funzione strcpy(stringa1,stringa2) contenuta nell'header string.h per poter in qualche modo assegnare ad una stringa un nuovo contenuto.
    ivanet

  3. #3
    Al posto di
    Codice PHP:
    stringa varie_str[scelta]; 
    ho provato
    Codice PHP:
    stringa "ugo"
    ma non funziona, ora provo strcpy, poi farò risapere
    by fede089

  4. #4

    funziona!

    strcpy funziona, grazie!
    by fede089

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45
    Perfetto, alla prossima!
    ivanet

  6. #6

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

    Ragazzi usare la strcpy() va bene, ma attenzione il puntatore a char 'stringa'
    deve essere inizializzato prima di essere usato !!!
    codice:
    int main(void) {
    //		char *stringa;	// Errore : il puntatore non è inizializzato !
    		char stringa[20];	// Ora è una c-string correttamente inizializzata.
    		modifica(stringa);
    		
    		printf("%s\n", stringa);
    	      return 0;
    }
    In alternativa, si potrebbe utilizzare il puntatore e ricorrere all'alocazione dinamica della stringa,
    ma in questo caso non mi sembra necessario.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45
    Si effettivamente per non incorrere a letture "strane" occorre sempre inizializzare...
    in questo caso dato che ancora non si sa quale sarà il contenuto, si può inizializzare a NULL....
    e poi farlo puntare all'inidirizzo voluto.
    ivanet

  8. #8
    Originariamente inviato da ivanet
    Si effettivamente per non incorrere a letture "strane" occorre sempre inizializzare...
    in questo caso dato che ancora non si sa quale sarà il contenuto, si può inizializzare a NULL....
    e poi farlo puntare all'inidirizzo voluto.
    L'utente fede089, nella main, oltre a non inizializzare il puntatore, non aveva neanche
    allocato la memoria necessaria, la povera strcpy() andrebbe a scrivere in una
    zona di memoria non riservata a tale scopo, e probabilmente il programma provocherà un
    accesso violato alla memoria.

    Avrebbe dovuto scrivere :
    codice:
            char *stringa = NULL;
            stringa = (char*) malloc(sizeof(char)*20);
            modifica(stringa);
    Oppure, semplicemente :
    codice:
            char stringa[20];
            modifica(stringa);
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45
    Per inizalizzare il puntatore potrebbe anche fare in questo modo, tanto poi assegna la nuova zona di memoria....
    char *str;
    str=NULL;

    poi puoi assegnargli l'indirizzo voluto, cioè la fai puntare a ciò che vuoi....
    ivanet

  10. #10
    Originariamente inviato da ivanet
    Per inizalizzare il puntatore potrebbe anche fare in questo modo, tanto poi assegna la nuova zona di memoria....
    char *str;
    str=NULL;

    poi puoi assegnargli l'indirizzo voluto, cioè la fai puntare a ciò che vuoi....
    Non è il modo di fare corretto, ad un puntatore è bene assegnare subito un valore
    al momento stesso della sua dichiarazione.

    Fai attenzione a quando azzeri il valore di un puntatore con :
    str=NULL;

    che andrebbe usato solo al momento della dichiarazione del puntatore o dopo aver
    rilasciato la memoria cui esso puntava con l'apposita funzione free( str ).

    Altrimenti la memoria, eventualmente allocata, a cui puntava resta inutilizzabile fino al termine
    del programma, (non ha più alcun riferimento) ed i memory-leak si sprecano ...
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.