2017-10-19 23 views
0

Je suis nouveau à C et j'essaie d'exécuter quelques lignes de code pendant qu'il y a une entrée de l'utilisateur. Pour une raison quelconque, je reçois une erreur sur cette ligne:C programme - pointeur de déréférencement

char names[SIZE][LENGTH];  
while(fgets(names, LENGTH, stdin) != '\0') 

L'erreur est:. « Marqueurs multiples à cette ligne Comparaison entre pointeur et zéro constante de caractère Vouliez-vous dire à déréférencer le pointeur Passing Argument 1.? des « fgets » de type pointeur incompatible.

Toutes les idées?

+1

Vous avez besoin d'un bon livre C –

Répondre

2

Il semble que vous allez lire des lignes en éléments d'un tableau à deux dimensions.

de la norme C (7.21.7.2 le fonction fgets)

3 The fgets function returns s if successful. If end-of-file is encountered and no characters have been read into the array, the contents of the array remain unchanged and a null pointer is returned. If a read error occurs during the operation, the array contents are indeterminate and a null pointer is returned.

Ainsi, une boucle correcte peut ressembler à

size_t i = 0; 
while(i < SIZE && fgets(names[i], LENGTH, stdin) != NULL) 
{ 
    //... 
    ++i; 
} 

Ou si vous allez arrêter de lire les lignes quand une ligne vide a été encounterd alors vous pouvez écrire

size_t i = 0; 
while(i < SIZE && fgets(names[i], LENGTH, stdin) != NULL && names[i][0] != '\n') 
{ 
    //... 
    ++i; 
} 

Les messages d'erreur que votre compilateur a émis signifie le suivant

Passing argument 1 of 'fgets' from incompatible pointer type.

Dans cette fonction appel

fgets(names, LENGTH, stdin) 

l'expression names utilisé comme premier argument est de type char (*)[LENGTH] mais la fonction prend un argument du type char * .

"Comparison between pointer and zero character constant. Did you mean to dereference the pointer?

Ce message signifie que le compilateur ne peut pas conclure que le par le pointeur de fonction est comparée avec un pointeur NULL ou vous allait comparer le caractère pointé par le pointeur retourné avec le caractère '\0'.

+0

J'ai essayé d'utiliser NULL, cependant, j'obtiens l'erreur: en passant l'argument 1 de 'fgets' d'un type de pointeur incompatible – Liz