Почему fgets возвращает плохую строку? - PullRequest
0 голосов
/ 01 июля 2011

Не знаю, как еще это выразить, но я знаю, что делаю что-то не так.

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

fgets(ourList, 1024, modified)

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

Теперь fgets выполняет свою работу, но когда я пытаюсь сформировать эту строку с помощью sprintf, я получаю grep -c Lanuncher.ini, а остальное отсутствует. Теперь вот кикер, если я поменяю порядок следующим образом:

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

Результатом будет то, что я хочу, но и недопустимый поиск grep: grep -c /shares/mJim Lanucher.ini

Также, если я сделаю это:

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

Создает ожидаемую строку (grep -c /shares/mJim /shares/mJim). Кто-нибудь знает, что происходит?

Хорошо для ввода это простой текстовый файл, который представляет собой список из одного столбца:

Launcher.ini
bits.exe
etc....

Мусор в этом случае - необычно короткая строка, о которой я упоминал. Когда я распечатываю, что наш ourList, он возвращает Launcher.ini.

Ответы [ 3 ]

5 голосов
/ 01 июля 2011

fgets включает в себя трейлинг '\n'.Вы, вероятно, хотите удалить его перед сборкой 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 */
}
1 голос
/ 01 июля 2011

Если строка, которую вы читаете из потока modified FILE, содержит символ новой строки, то символ новой строки будет включен в возвращенную строку символов.Скорее всего, у вас есть:

"Launcher.ini\n"

Полоска новой строки, и вы должны быть в порядке.

1 голос
/ 01 июля 2011

Не знаю точно.Наш список достаточно велик?Вы также должны действительно, действительно проверить возвращаемое значение fgets ().

...