Quick question on NSLog and printf:

I am running the following in Xcode:

char array[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
char *arrayPtr = array;

NSLog(@"TEST:  %c", *(arrayPtr+9));

printf(@"TEST:  %c", *(arrayPtr+9));

Every line works fine except this:

printf(@"TEST:  %c", *(arrayPtr+9));

Error:

Implicit conversion of an Objective-C pointer to 'const char *' is disallowed with ARC.

Could you explain to me what happens here and if a simple cast here would make it work?

NSLog works ok, no error whatsoever. But printf does. I have tried using __bridge cast, but it doesn't seem to satisfy it.

Is there a way to make this work without needing to turn off ARC?

有帮助吗?

解决方案

The error has nothing to do with the char array or arithmetic. It's telling you that you're passing an NSString to printf() as the format string, when you need to pass a regular C string:

printf("TEST:  %c", *(arrayPtr+9));
//     ^ No @
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top