2017-09-20 5 views
0

Une entrée prévue pour le code que je suis en train de courir ressemble à quelque chose comme ceci:La prise d'entrée de défaut de segmentation de stdin

(i, j) où i et j sont des entiers. (Ex. (1,2), (10,21), etc.)

J'ai besoin de stocker les deux entiers dans des variables int.

Voici ce que je faisais:

getchar(); // gets open parenthesis 

    // gets first num 
    char *first; 
    int z = 0; 
    int a; 

    while((a = getchar()) != ',') { 
     first[z] = a; 
     z++; 
    } 
    int firstNum; 
    sscanf(first, "%d", &firstNum); 
    printf("%d\n", firstNum); //checking if got correct num 

    // gets second num 
    char *second; 
    int y = 0; 
    int b; 
    while((b = getchar()) != ')') { 
     second[y] = b; 
     y++; 
    } 
    int secondNum; 
    sscanf(second, "%d", &secondNum); 
    printf("%d\n", secondNum); //checking if got correct num 

Il travaille pour obtenir le premier numéro. Mais, quand je l'ai fait pour le second numéro, j'ai eu une faute de segmentation et je n'arrive pas à comprendre pourquoi? J'ai simplement refait le processus d'obtention du premier numéro?

Merci!

+4

'first' est seulement un pointeur, il n'a pas de mémoire => utilisation de malloc ou tableau brut – Garf365

+0

Je l'ai changé en un tableau de taille 100 et cela fonctionne. Je vous remercie! – Katrina

+0

En outre, le retour à la ligne qui est écrit sur stdin lorsque vous appuyez sur la touche Entrée peut entraîner des problèmes avec les appels suivants à 'sscanf'. Inclure un espace dans la première partie de votre chaîne de format pour consommer le '\ n':' sscanf (d'abord, "% d", & firstNum); ' – ryyker

Répondre

4

La première et la seconde devraient être des tableaux et non des pointeurs. Vos deux pointeurs pointent vers une place dans la mémoire, et lorsque vous y accédez "en tant que tableaux", vous remplacez la mémoire différente.

changement:

char *first; 
char *second; 

être:

char first[128] ={0}; 
char second[128] ={0}; 

De plus, lisez ce qui suit: http://www.geeksforgeeks.org/difference-pointer-array-c/ Il explique la différence entre tableau et pointeur de manière très claire.