0

我希望这次我正确地格式化了代码。首先让我说代码按原样工作;在理解某些部分并修改其他部分时,我遇到了麻烦。

我将删除我的众多评论并将自己限制在几个问题上。1. FILE是Obj-C中的关键字吗?它的作用是什么?为什么都是大写?2. “r”是做什么的?3. 文本文件中已有包含空格的字符串,每个字符串以\n结尾;为什么不让它们成为 NSStrings 而不是 c-strings?4. 为什么,当我尝试将文件的启动参数(使用可执行文件,单击参数和加号,然后键入参数)更改为 /tmp 以外的任何内容(例如 /Desktop)时,会出现错误?毕竟,/tmp 是一个易变、易受攻击的地方。这是我为 /Desktop 得到的错误:由于信号 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;

}

4

1 回答 1

0

其中大部分是标准 C 的东西,它恰好被编译为 Objective-C,但 FILE 和 fopen() 和 fgets() 是普通的老式 C。

FILE 可能是一个#define'd 某处引用结构定义。它不是关键字,只是在 stdio.h 中定义(我认为)的常规符号。

“r”表示“可读”。在 fopen 中查找参数可以具有的所有值,但“r”、“r+”、“b”、“a”、“w”等是其中的一些选项。

你确定 /Desktop 是一个有效的目录吗?在控制台窗口中切换到该目录并键入“pwd”以确保您获得了正确的路径。如果 wordFile 为空(即由于某种原因找不到文件或打开它),您可能希望在尝试对其使用 fgets 之前收到一条错误消息。

于 2010-06-04T23:58:15.437 回答