2009-02-26 75 views
7

我想铸造我的NSString恒定焦炭 的代码如下所示:铸造的NSString烧焦问题

NSString *date = @"12/9/2009"; 
char datechar = [date UTF8String] 

NSLog(@"%@",datechar); 

但它返回警告 赋值时将指针整数,未铸造 ,不能正确打印字符,可有人告诉我这是什么问题

回答

27

尝试更多的东西是这样的:

NSString* date = @"12/9/2009"; 
char* datechar = [date UTF8String]; 
NSLog(@"%s", datechar); 

您需要使用的char *代替字符,你必须用%来打印C字符串不是%@(%@仅用于Objective-C的ID类型)。

+5

UTF8字符串返回一个const char * – 2012-06-05 14:51:56

1

我想补充(和%个%@代替)char和datechar之间的*:

NSString *[email protected]"12/9/2009"; char * datechar=[date UTF8String]; 
NSLog(@"%s",datechar); 
6

我想你想使用:

const char *datechar = [date UTF8String]; 

(注意在那里*)

+1

这应该是答案 – Adamski 2015-09-18 23:19:40

2

你的代码有2个问题:

1) “字符datechar ......” 是单字符,它只能保存一个字符/字节,并且不会保存从日期/字符串对象生成的整个数组。因此,你的行应该在变量前面有一个(*)来存储多个字符,而不仅仅是一个。 2)在上述修复之后,你仍然会得到关于(char *)vs(const char *)的警告,因此,你需要“投射”,因为它们在技术上是相同的结果。改变的行:

char datechar = [date UTF8String];

进入=符号后

char *datechar = (char *)[date UTF8String];

通知(字符*),讲述而非该表达式将返回(字符*)编译器它是默认的(const char *)。

我知道你已经在早些时候标记了答案,但我认为我可以贡献来解释问题以及如何解决更多细节。

我希望这会有所帮助。

亲切的问候 海德

0

我很痛苦很长一段时间来NSString转换为char使用此功能

-(void)gpSendDTMF:(char) digit callID: (int)cid; 

我试图从谷歌搜索的这个问题/很多事情每一个答案但它不适合我。

最后我得到了解决方案。


解决方案:

NSString *digit = @"5"; 

char dtmf; 

char buf[2]; 

sprintf(buf, "%d", [digit integerValue]); 

dtmf = buf[0];