警告:语义问题:不兼容的指针类型使用“NSString *”类型的表达式初始化“char *”

时间:2012-02-29 22:00:07

标签: objective-c cocoa nsstring

我正在尝试执行以下操作:

NSString *personDesc = [NSString stringWithFormat:@"Person named %@", person.name];
char *myArguments[] = { personDesc, NULL };

但它产生了这个错误:

warning: Semantic Issue: Incompatible pointer types initializing 'char *' with an expression of type 'NSString *'

我尝试将NSString转换为char的原因是因为我将myArguments传递给AuthorizationExecuteWithPrivileges

e.g。

AuthorizationExecuteWithPrivileges(auth, tool, kAuthorizationFlagDefaults, myArguments, NULL);

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如上所述,您需要先将NSString转换为char*,然后才能执行您想要的操作。尝试类似:

NSStringEncoding stringEncoding = NSUTF8StringEncoding;
NSString *personDesc = [NSString stringWithFormat:@"Person named %@", person.name];
const char *cPersonDesc = [personDesc cStringUsingEncoding:stringEncoding];
char *myArguments[] = { cPersonDesc, NULL };

// auth and tool already exist
AuthorizationExecuteWithPrivileges(auth, tool, kAuthorizationFlagDefaults, myArguments, NULL);

答案 1 :(得分:1)

没错。 NSString不是char *。它是NSString。他们彼此无关。

由于您没有说明您真正想要做什么,因此无法提供进一步的建议。如果你愿意,可以将NSString转换为char *,例如与getCString:maxLength:encoding:。但你为什么要这么做?