在目标C中打印NSString的正确方法是什么?许多示例使用NSLog(),但是根据文档:
NSLog是一个FoundationKit函数,用于将调试语句打印到控制台。..。NSLog的基本工作原理是: fprintf(stderr,format_string,args .);
对我来说,这有点像Win32 32/C++中的_TRACE宏。我不想打印到stderr,我想打印到stdout。有人建议使用printf()如下:
printf("%s", [str cStringUsingEncoding:NSUTF8StringEncoding]);但是,这似乎是一个额外的间接水平,以使NSString打印,它并不是“感觉”的解决方案。
发布于 2010-02-07 07:31:44
这就是解决办法。
因为printf是一个纯C函数,所以它不会识别objects对象。(NSLog的格式化程序与printf的格式化程序不同。)因此,在格式化之前,必须将其转换为C字符串。
顺便说一下,您可以使用[str UTF8String]而不是[str cStringUsingEncoding:NSUTF8StringEncoding]。
发布于 2010-02-07 17:17:30
在Cocoa中,向stdout发送信息实际上是一件非常罕见的事情,因为几乎所有的项目都是GUI。作为命令行工具构建或需要处理stdout的项目相对较少。
然而,基金会确实提供了编写标准输出的方法。具体来说,NSFileHandle有fileHandleWithStandardOutput,它为您提供了一个可以写入stdout的文件句柄。
从那里开始,就需要将NSString转换为NSData并编写它。
相当多的步骤,但是很容易被一个可重用的函数所包围:
void MyLog(NSString *format, ...) {
va_list args;
va_start(args, format);
NSString *formattedString = [[NSString alloc] initWithFormat: format
arguments: args];
va_end(args);
[[NSFileHandle fileHandleWithStandardOutput]
writeData: [formattedString dataUsingEncoding: NSNEXTSTEPStringEncoding]];
[formattedString release];
}发布于 2016-10-06 08:10:04
C字符串(UTF8String)是指向string对象内部结构的指针。
NSString *str = @"Hello, World.";
printf("%s\n", [str UTF8String]);https://stackoverflow.com/questions/2216266
复制相似问题