Очень основная проблема Objective-C / C - PullRequest
1 голос
/ 16 января 2010

Вот мой код:

#import <Foundation/Foundation.h>

void PrintPathInfo() {
    const char *path = [@"~" fileSystemRepresentation];
    NSLog(@"My home folder is at '%@'", path);
}

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    PrintPathInfo();

    [pool drain];
    return 0;
}

И вот моя проблема: Программа получила сигнал: «EXC_BAD_ACCESS».

Я действительно думаю, что проблема в моем NSLog, но я не знаю, как ее решить.

Может ли кто-нибудь помочь мне, пожалуйста? Спасибо!

Ответы [ 2 ]

8 голосов
/ 16 января 2010
Путь

не является строкой NSSt, поэтому происходит сбой. % @ в строке форматирования ожидает объект и запрашивает описание для получения строки для печати ... поскольку вы используете строку в стиле C, вам необходимо использовать стандартные средства форматирования строки C ИЛИ преобразовать const char * обратно в NSString с использованием метода initWithCString: encoding: class из NSString.

Оставаясь с постоянным символом *, вы можете использовать:

 NSLog(@"My home folder is at '%s'", path);

, который будет работать.

6 голосов
/ 16 января 2010

% @ для объектов. (Как NSString). для const char * вам понадобится старый добрый% s из кодов формата printf в c.

См. http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

Для формата указывает и их значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...