objective-C 中%@和%s

引言:
最新刚开始学习objective-C,看了《objective-C基础教程》也有两天时间;于是动手写了一个简单的测试,如下:
#import <Foundation/Foundation.h>
int main(int argc, const char *argv[])
{
@autoreleasepool {
NSLog(@"%@", argv[0]);
}
}

编译运行后,发现出现了EXC_BAD_ACCESS错误,想不通啊~


分析:
左看右看,就NSLog(@"%@", argv[0])这么一句,程序就段错误了,后面无意间将%@改为%s,程序就正常运行;


于是将程序修改了下:
#import <Foundation/Foundation.h>
int main(int argc, const char *argv[])
{
@autoreleasepool {
char *str = "hello world";
NSLog(@"%@", str);
}
}



编译运行后,发现是同样问题,终于找到原因了,由于定义的是c标准的字符串,而%@是objective-C的字符串NSString;
两者还是存在不同之处;于是修改程序如下:
#import <Foundation/Foundation.h>
int main(int argc, const char *argv[])
{
@autoreleasepool {
char *str = "hello world";
NSLog(@"%s", str);
}
}



总结:当源字符串为c标准字符串时,应该用%s,除非先将源字符串转为objective-C的字符串;


你可能感兴趣的:(c,测试,Access)