我是目标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
有什么想法吗?
答案 0 :(得分:4)
它在我的机器上编译并运行良好。但是想象一下你的文件中有一个空行。然后strlen(word)
将返回零。因此,word[strlen(word)-1] = '\0';
将尝试设置一些可能无效的内存,因为word [-1]可能不是有效的内存单元,或者是您可以合法访问的内存单元。
哦,顺便说一下,它与objective-c无关。这主要是(但对于NSLog调用)纯ansi C。