EXC_BAD_ACCESS的简单代码

时间:2011-11-19 14:10:56

标签: objective-c c

我是目标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 个答案:

答案 0 :(得分:4)

它在我的机器上编译并运行良好。但是想象一下你的文件中有一个空行。然后strlen(word)将返回零。因此,word[strlen(word)-1] = '\0';将尝试设置一些可能无效的内存,因为word [-1]可能不是有效的内存单元,或者是您可以合法访问的内存单元。

哦,顺便说一下,它与objective-c无关。这主要是(但对于NSLog调用)纯ansi C。