простой код с EXC_BAD_ACCESS - PullRequest
       2

простой код с EXC_BAD_ACCESS

0 голосов
/ 19 ноября 2011

Я новичок в цели c и пишу код в соответствии со справочником.но что-то пошло не так, и я не знаю, почему.

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    if (argc==1){
        NSLog(@"you need to provide a file name");
        return (1);
    }

    FILE *wordFile = fopen(argv[1], "r");
    char word[100];

    while(fgets(word , 100, wordFile)){
        word[strlen(word)-1] = '\0';

        NSLog(@"the length of the %s is %lu", word, strlen(word));
    }
    fclose(wordFile);

    return 0;
}

инструмент показывает, что деталь while пошла не так, EXC_BAD_ACCESS.
Есть идеи?

1 Ответ

4 голосов
/ 19 ноября 2011

Он компилируется и работает нормально на моей машине. Но представьте, что в вашем файле есть пустая строка. Тогда strlen(word) вернет ноль. Следовательно, word[strlen(word)-1] = '\0'; попытается установить некоторую память, которая может быть недопустимой, поскольку слово [-1] может не являться допустимой ячейкой памяти или ячейкой памяти, к которой вы можете легально обращаться.

Да, и, кстати, это не имеет ничего общего с целью-c. Это в основном (но для вызова NSLog) чисто ANSI C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...