首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印NSString

打印NSString
EN

Stack Overflow用户
提问于 2010-02-07 07:20:17
回答 6查看 34.5K关注 0票数 32

在目标C中打印NSString的正确方法是什么?许多示例使用NSLog(),但是根据文档:

NSLog是一个FoundationKit函数,用于将调试语句打印到控制台。..。NSLog的基本工作原理是: fprintf(stderr,format_string,args .);

对我来说,这有点像Win32 32/C++中的_TRACE宏。我不想打印到stderr,我想打印到stdout。有人建议使用printf()如下:

代码语言:javascript
复制
printf("%s", [str cStringUsingEncoding:NSUTF8StringEncoding]);

但是,这似乎是一个额外的间接水平,以使NSString打印,它并不是“感觉”的解决方案。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-07 07:31:44

这就是解决办法。

因为printf是一个纯C函数,所以它不会识别objects对象。(NSLog的格式化程序与printf的格式化程序不同。)因此,在格式化之前,必须将其转换为C字符串。

顺便说一下,您可以使用[str UTF8String]而不是[str cStringUsingEncoding:NSUTF8StringEncoding]

票数 26
EN

Stack Overflow用户

发布于 2010-02-07 17:17:30

在Cocoa中,向stdout发送信息实际上是一件非常罕见的事情,因为几乎所有的项目都是GUI。作为命令行工具构建或需要处理stdout的项目相对较少。

然而,基金会确实提供了编写标准输出的方法。具体来说,NSFileHandlefileHandleWithStandardOutput,它为您提供了一个可以写入stdout的文件句柄。

从那里开始,就需要将NSString转换为NSData并编写它。

相当多的步骤,但是很容易被一个可重用的函数所包围:

代码语言:javascript
复制
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];
}
票数 29
EN

Stack Overflow用户

发布于 2016-10-06 08:10:04

C字符串(UTF8String)是指向string对象内部结构的指针。

代码语言:javascript
复制
NSString *str = @"Hello, World.";
printf("%s\n", [str UTF8String]);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2216266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档