У меня есть следующие Objective-C фрагмент кода в моей привет мир пример:Сегментация ошибка при attemping для печати NSString, как UTF8String
//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 toolchain для создания исполняемого файла. Я просто вижу эту проблему, создавая ее с clang на ubuntu.
Любая помощь очень ценится.
литьем я имел в виду это заявление: «[Helloworld UTF8String]» –
'[Helloworld UTF8String]' является вызов метода , а не литой. Пожалуйста, предоставьте остальную часть кода для контекста. То, что вы опубликовали, не будет компилироваться (нет функций/методов и т. Д.). – BergQuester
UTF8String возвращает версию 'const char * 'NSString. Это существование привязано к времени жизни объекта NSString таким образом, который может быть легко удален, если среда управления хранением даже немного повреждена. –