Жалоба GCC - Присвоение делает целое число из указателя без приведения - PullRequest
0 голосов
/ 21 февраля 2011

Я пытаюсь убрать завершающий \n символ, к которому добавляется fgets(). Я заменяю этот символ символом окончания строки \0.

Почему компилятор выдает ошибку: «Присваивание делает целое число из указателя без приведения».

word[strlen(word) - 1] = "\0";

Вот более полный пример кода - вопрос, если нужен какой-то контекст.

FILE *wordFile = fopen("/temp/words.txt", "r");
char word[100];
while (fgets(word, 100, wordFile)) {
    // Strip off the trailing the \n so it is not counted
    // as part of the string length
    word[strlen(word) - 1] = "\0";
    :
}

1 Ответ

2 голосов
/ 16 марта 2012

Ваша проблема заключается в утверждении:

word[strlen(word) - 1] = "\0";

При попытке присвоить указатель строке C элементу массива, целому типу char, следовательно,сообщение об ошибке "Assignment makes integer from pointer without cast".

Что вы должны были написать:

word[strlen(word) - 1] = `\0`;

, который присваивает символ элементу массива.

AsКроме того, вы должны следить за строками длиной более (около) 100 символов.Вы прочтете только первую часть строки, в конце не будет символа новой строки, а остальную часть строки вы прочтете как отдельную строку в следующий раз через цикл (иэто может произойти много раз, если у вас есть строка длиной, например, 1 КБ).

Для того чтобы это ни стоило, вы можете исправить эти проблемы с помощью кода следующим образом:

if ((s = strlen (word)) > 0) {
    if (s[s-1] != '\n') {
        // Line was too long, do something intelligent.
    } else {
        s[s-1] = '\0';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...