我希望这次正确格式化代码。我先说代码按原样运行;它是在理解某些部分并修改我遇到麻烦的其他部分。
我将删除我的众多评论,并将自己限制在几个问题上。 1. FILE是Obj-C中的关键字吗?它的功能是什么?为什么全部上限? 2.“r”有什么作用? 3.文本文件已经包含包含空格的字符串,每个空格以\ n结尾;为什么不让它们成为NSStrings而不是c-strings? 4.为什么当我尝试将文件的启动参数(使用可执行文件,点击参数和加号,并输入参数)更改为/ tmp以外的任何内容(例如/ Desktop)时,我是否会收到错误?毕竟,/ tmp是一个易变,易受攻击的地方。这是我得到/桌面的错误:由于信号10(SIGBUS),调试器已经退出。
以下是代码:
#import <Foundation/Foundation.h>
int main(int argc,const char * argv []) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
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(@"%s is %d characs long", word, strlen(word));
}
fclose (wordFile);
[pool drain];
return 0;
}
答案 0 :(得分:0)
这大部分都是标准的C语言,它恰好被编译为objective-c但是FILE和fopen()以及fgets()都是老式的C语言。
FILE主要是#define'd,用于引用结构定义。它不是关键字,只是stdio.h中定义的常规符号(我认为)。
“r”表示“可读”。查找参数可以拥有的所有值的fopen,但是“r”,“r +”,“b”,“a”,“w”等是一些选项。
您确定/桌面是有效目录吗?在控制台窗口中切换到该目录并键入“pwd”以确保您获得正确的路径。如果wordFile为null(即无法找到文件或因某些原因打开它),您可能希望收到错误消息,然后再尝试使用fgets。