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

    c passaggio di una stringa

    Ciao,
    voglio fare un programma che mi fa acquisire una stringa dal main e voglio poi controllarla nella funzione(il programma è ancora all'inizio quindi altre istruzioni non ce ne sono) : usando il whatch vendo che in stringa[] appare syntax errore e in più quando arriva all'istruzione printf("%s", stringa[]); il programma si blocca
    perché???
    int controllo(char s[]);

    int main()
    {
    char sn[50];
    int co;
    printf("inserisisci il numero : ");
    scanf("%s" ,&sn);
    co = controllo(sn[50]);
    }

    int controllo(char stringa[])
    {
    int c;
    int l = 0;
    printf("elaborazione...\n");
    printf("%s", stringa[]);
    c = 1;
    return c;
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: c passaggio di una stringa

    Originariamente inviato da megaempire
    Ciao,
    voglio fare un programma che mi fa acquisire una stringa dal main e voglio poi controllarla nella funzione(il programma è ancora all'inizio quindi altre istruzioni non ce ne sono) : usando il whatch vendo che in stringa[] appare syntax errore e in più quando arriva all'istruzione printf("%s", stringa[]); il programma si blocca
    perché???
    int controllo(char s[]);

    int main()
    {
    char sn[50];
    int co;
    printf("inserisisci il numero : ");
    scanf("%s" ,&sn);
    co = controllo(sn[50]);
    }

    int controllo(char stringa[])
    {
    int c;
    int l = 0;
    printf("elaborazione...\n");
    printf("%s", stringa[]);
    c = 1;
    return c;
    }
    scanf vuole un indirizzo ma sn lo è già, non serve usare & in questo caso.
    printf("%s", stringa[]) invece non ha alcun senso:

    codice:
     ...
        char sn[50]; 
        scanf("%s", sn);
    
        co = controllo(sn);
    }
    
    int controllo(char * stringa)
    {
    ...
        printf("%s", stringa);
    ...
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Non so che senso abbia, comunque...
    codice:
    #include <stdio.h>
    
    int controllo(char *s);
     
    int main(void)
     {
     	char sn[50];
     	int co;
     	printf("inserisisci il numero : ");
     	scanf("%s", sn);
     	co = controllo(sn);
     }
     
    int controllo(char *stringa)
     {
     	int c;
     	int l = 0;
     	printf("elaborazione...\n");
     	printf("%s", stringa);
     	c = 1;
     	return c;
     }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    grazie mille!

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Originariamente inviato da megaempire
    grazie mille!
    Sì, ma è meglio che leggi un libro che ti spieghi le basi del C...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Io userei la fgets al posto della scanf, in modo da evitare possibili overflow(e vari altri problemi):

    http://c-faq.com/stdio/scanfprobs.html

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    #define STRLEN 50
    
    int controllo(const char *stringa);
    
    int main()
    {
       char sn[STRLEN + 1];
       int co;
       
       printf("inserisisci il numero : ");   
       fgets(sn, STRLEN, stdin);
       
       co = controllo(sn);
    }
    
    int controllo(const char * stringa)
    {
       int c;
       int l = 0;
       
       printf("elaborazione...\n");
       printf("%s", stringa);
       
       c = 1;
       
       return c;
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Vincenzo1968
    Io userei la fgets al posto della scanf, in modo da evitare possibili overflow(e vari altri problemi):

    http://c-faq.com/stdio/scanfprobs.html

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    #define STRLEN 50
    
    int controllo(const char *stringa);
    
    int main()
    {
       char sn[STRLEN + 1];
       int co;
       
       printf("inserisisci il numero : ");   
       fgets(sn, STRLEN, stdin);
       
       co = controllo(sn);
    }
    
    int controllo(const char * stringa)
    {
       int c;
       int l = 0;
       
       printf("elaborazione...\n");
       printf("%s", stringa);
       
       c = 1;
       
       return c;
    }
    Per la cronaca, la lunghezza massima della stringa da leggere (per evitare overflow) si può specificare anche con scanf se ce n'è bisogno.

    Inoltre non è necessario allocare STRLEN + 1 caratteri, fgets considera la lunghezza massima passata come dimensione del buffer.
    effeffe

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.