2011-07-01 2 views
0

Je ne sais pas comment le dire autrement, mais je sais que je fais quelque chose de mal.Pourquoi fgets renvoie une mauvaise chaîne?

char *temp2= "/shares/mJim"; 
char ourList[1024]; 

fgets(ourList, 1024, modified) 

sprintf(sysString, "grep -c %s %s", ourList, temp2); 

fgets maintenant fait son travail, mais lorsque je tente de former cette chaîne avec sprintf je reçois grep -c Lanuncher.ini et le reste manque. Maintenant est le kicker, si j'inverser l'ordre comme celui-ci:

sprintf(sysString, "grep -c %s %s", temp2, ourList); 

Le résultat sera ce que je veux, mais et recherche non valide pour grep: grep -c /shares/mJim Lanucher.ini

Aussi, si je fais ceci:

sprintf(sysString, "grep -c %s %s", temp2, temp2); 

Il crée la chaîne attendue (grep -c /shares/mJim /shares/mJim). Est-ce que quelqu'un sait ce qu'il se passe?

Eh bien pour l'entrée est un simple fichier texte qui est une liste de colonne unique:

Launcher.ini 
bits.exe 
etc.... 

Les ordures dans ce cas est la chaîne inhabituellement courte que je l'ai mentionné. Lorsque j'imprime ce que ourList a il retourne Launcher.ini.

+1

Il serait beaucoup plus facile d'aider si vous pouviez nous montrer: (1) l'entrée de l'échantillon, (2) la prétendue "poubelle". –

+0

Oui le '\ n' était le problème merci pour l'aide tout le monde. –

+0

Assurez-vous de marquer la bonne réponse. –

Répondre

5

fgets inclut un arrière '\n'. Vous voulez sans doute de l'enlever avant de construire sysString ...

fgets(ourList, sizeof ourList, modified); 
size_t ourListlen = strlen(ourList); 
if (ourListlen && (ourList[ourListlen - 1] == '\n')) { 
    ourList[--ourListlen] = 0; /* remove trailing '\n' and update ourListlen */ 
} 
+0

Bien sûr, vous devriez vérifier la valeur de retour de' fgets' et traiter les erreurs de manière appropriée. – pmg

1

Je ne sais pas avec certitude. Notre liste est-elle assez grande? Vous devriez aussi vraiment, vraiment vérifier la valeur de retour de fgets().

+0

+1 pour suggérer que la valeur de retour de 'fgets' soit vérifiée :) – pmg

1

Si la ligne que vous lisez du modified flux de fichier contient un saut de ligne, qui newline will be included dans la chaîne de caractères retournée. Les chances sont, vous avez:

"Launcher.ini\n" 

Bannissez la nouvelle ligne, et vous devriez être bon pour aller.

+0

Je vais essayer, ça pourrait être le problème, en réponse à toutes vos suggestions. –

Questions connexes