【问题标题】:How to use printf with NSString如何将 printf 与 NSString 一起使用
【发布时间】:2011-04-17 07:15:48
【问题描述】:

我需要使用NSLog 之类的东西,但没有时间戳和换行符,所以我使用printf。我如何将它与NSString 一起使用?

【问题讨论】:

    标签: objective-c cocoa-touch nsstring printf nslog


    【解决方案1】:

    您可以通过调用UTF8String 方法将NSString 转换为UTF8 字符串:

    printf("%s", [string UTF8String]);
    

    【讨论】:

    • 不幸的是,这个 sn-p 在使用 gnustep 时会导致分段错误。
    • 好问题。我真的不知道。但是如果其他人知道这个问题的答案会很高兴。在stackoverflow.com/questions/21242527/… 提出问题
    • 不能使用英语以外的语言,字符串被弄乱了
    • 我运行以下但得到一个空值?为什么? plist 的值为“123”。 printf("\nmvc: 订阅了'应用程序将终止通知'"); printf("\nmvc: %s",[[[[NSProcessInfo processInfo] environment] objectForKey:@"GitHash"] UTF8String]);
    【解决方案2】:
    //public method that accepts a string argument
    
    - (void) sayThis : ( NSString* )  this 
    {
    
        printf("%s",[this cString]);    
    }
    

    根据 NSString.h(html 版本),UTF8String 方法仅适用于 Mac OSX。

    (见下文) 我查看的所有其他方法都标记为“可用性:Openstep”

    还有其他方法可以返回常规 char* 字符串,但它们可能会引发字符转换异常。

    注意 字符串指针指向可能会消失的内存,因此如果要保留字符串内容的副本,则必须复制字符串,但立即打印应该没问题?

    还有一些方法会返回一个编码的字符串,还有一个方法来测试你想要的编码是否可以工作(我认为),这样你就可以检查你需要的编码是否可以工作,然后请求一个已经编码为的字符串必填。

    通过阅读 .h 文件本身,有许多编码和编码之间的转换。 这些是使用枚举管理的,因此您可以将所需的编码类型作为参数传递。

    在 linux 等上做:

    找到 NSString.h ** 注意这也找到了 html doc 文件

    否则做一个:

    找到 /usr -name NSString.h

    注意您的里程可能会有所不同:)

    谢谢。

    来自 NSString.h html doc 文件:

    cString - (const char*) cString; 可用性:OpenStep

    返回一个指向默认编码的 8 位字符的空终止字符串的指针。指向的内存不属于调用者所有,所以调用者必须复制它的内容来保留它。如果在转换过程中会丢失信息,则引发 NSCharacterConversionException。 (参见 -canBeConvertedToEncoding: 。)

    cStringLength - (NSUInteger) cStringLength; 可用性:OpenStep

    返回使用默认 C 字符串编码转换为字节的此 unicode 字符串版本的长度。如果转换会导致信息丢失,结果是不可预测的。检查 -canBeConvertedToEncoding: 首先。

    cStringUsingEncoding: - (const char*) cStringUsingEncoding: (NSStringEncoding)encoding; 可用性:MacOS-X 10.4.0,基础 1.2.0

    返回一个指针,该指针指向指定编码的以空字符结尾的字符串。 注意。在 GNUstep 下,您可以使用它来获取以 nul 结尾的 utf-16 字符串(十六位字符)以及八位字符串。 指向的内存不属于调用者所有,所以调用者必须复制它的内容来保留它。 如果在转换过程中会丢失信息,则引发 NSCharacterConversionException。

    canBeConvertedToEncoding: - (BOOL) canBeConvertedToEncoding: (NSStringEncoding)encoding; 可用性:OpenStep

    返回此字符串是否可以在不丢失信息的情况下转换为给定的字符串编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多