非常基本的Objective-C / C问题

时间:2010-01-16 03:48:40

标签: objective-c

这是我的代码:

#import <Foundation/Foundation.h>

void PrintPathInfo() {
    const char *path = [@"~" fileSystemRepresentation];
    NSLog(@"My home folder is at '%@'", path);
}

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    PrintPathInfo();

    [pool drain];
    return 0;
}

这是我的问题: 程序接收信号:“EXC_BAD_ACCESS”。

我真的认为问题是我的NSLog,但我不知道如何解决它。

有人可以帮帮我吗?谢谢!

2 个答案:

答案 0 :(得分:8)

路径不是NSString,这就是崩溃的原因。格式化字符串中的%@需要一个对象,并要求其描述以获取要打印的字符串...因为您使用的是C样式字符串,您需要使用标准C字符串格式化程序或将const char *转换回来使用NSString的initWithCString:encoding:class方法创建NSString。

使用const char *,您可以使用:

 NSLog(@"My home folder is at '%s'", path);

哪个会奏效。

答案 1 :(得分:6)

%@用于对象。 (像NSString)。对于const char *,您将需要c的printf格式代码中的旧的%s。

请参阅http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

格式指定及其含义