2015-11-19 1 views
-1
char c; 
char unprocessed_instruction[9]; 
int i; 

for (i=0; i<num_tasks; i++){ 
    c = fgetc(fp); 
    int j = 0; 
    while (c != ' '){ 
     unprocessed_instruction[j] = c; 
     j = j + 1; 
     c = fgetc(fp); 
    } 
    char instruction[j]; 
    for (int i=0; i<j; i++){ 
     instruction[i] = unprocessed_instruction[i]; 
    } 
    for (int i=0; i<j; i++){ 
     printf("%c\n", instruction[i]); 
    } 
    int i = strcmp(instruction, "initiate"); 
    printf("%i\n", i); 
} 

Ainsi, le code stocke les caractères initiaux dans un fichier de texte dans un réseau délimité (9 est la taille maximale d'une entrée), puis se déplace dans un tableau qui est la taille de l'entrée réelle, si elle est plus petite. Si l'entrée est "initier", par exemple, l'instruction char [] est initialisée à la taille 8. Cela fonctionne très bien, comme je l'ai testé avec l'impression des éléments du tableau, mais un strcmp entre le tableau et "initier" ne fonctionne pas retour 0. Pourquoi est-ce?strcmp ne retourne pas 0 sur les chaînes « identique »

+2

Les chaînes ne sont pas simplement des tableaux de char –

+4

Vous ne terminez jamais une chaîne de caractères. Vous êtes actuellement chanceux que vous ne vous écrasiez pas avec une faute de segmentation ou une erreur similaire. –

+1

Avez-vous essayé 'printf ("% s \ n ", instruction);' pour vous assurer que les chaînes sont identiques? – immibis

Répondre

2
entrée

est "initié", par exemple, puis l'instruction char [] est initialisés à la taille 8

Vous ne pouvez pas passer à strcmp que parce que strcmp attend chaîne NULL résiliés. Comme il y a 8 caractères dans la chaîne "initier", le tableau qui le stocke doit au moins avoir la taille 9, pour permettre l'espace pour le terminateur nul - qui devrait suivre le dernier caractère.

+0

Merci, ça marche maintenant. – dbalagula23

+1

@ dbalagula23 Détail: J'espère que vous ne l'avez pas "réparé" en changeant simplement la taille d'un tableau. Passer de 8 à 9 est insuffisant. 'instruction []' a toujours besoin d'un caractère nul comme le dit cette réponse. – chux