尝试将NSString打印为UTF8String时出现分段错误

时间:2014-01-20 19:30:13

标签: objective-c gnustep

我在hello world示例中有以下Objective-c片段:

//hello.m

#import <Foundation/Foundation.h>
#import "hello.h"

void sayHello()
{
    #ifdef FRENCH
    NSString *helloWorld = @"Bonjour Monde!\n";
    #else
    NSString *helloWorld = @"Hello World\n";
    #endif
    printf("%s", [helloWorld UTF8String]);
}


//main.m
#import <Foundation/Foundation.h>
#import "hello.h"

int main (int argc, const char * argv[])
{
    sayHello();
    return 0;
}

在osx上构建这些东西工作正常并按预期运行。但是当在ubuntu上编译/链接它(使用GNUStep)时,在执行二进制文件时会导致分段错误。我把它钉在了printf语句中的转换操作中,但我不知道我在这里做错了什么或者我怎么能解决这个问题。

有趣的说明:使用gcc工具链构建可执行文件时,此工作正常。我在ubuntu上使用clang构建它时只看到了这个问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

要解决此问题,我最终将代码更改为以下内容:

...
void sayHello()
{
    #ifdef FRENCH
    NSString *helloWorld = @"${HELLO_WORLD_FRENCH}\\n";
    #else
    NSString *helloWorld = @"${HELLO_WORLD}\\n";
    #endif

    NSFileHandle *stdout = [NSFileHandle fileHandleWithStandardOutput];
    NSData *strData = [helloWorld dataUsingEncoding: NSASCIIStringEncoding];
    [stdout writeData: strData];
}
...