我正在使用这种方法
-(void)fetchDataFromTLE:(const char *)line1 AndLine2:(const char *)line2{
写这个,代码工作
char *line1= "blablabla";
char *lin2= "blebleble";
[self fetchDataFromTLE:line1 AndLine2:line2];
它有效。
但是我需要从NSUserDefaults获取line1和line2,保存为NSString。
所以:
NSString *line1 = [[NSUserDefaults standardUserDefaults] objectforkey:@"line1"];
NSString *line2 = [[NSUserDefaults standardUserDefaults] objectforkey:@"line2"];
当然,如果我试着调用我的方法
[self fetchDataFromTLE:line1 AndLine2:line2];
它不起作用
passing argument 1 of 'fetchDataFromTLE:AndLine2:' from incompatible pointer type
passing argument 2 of 'fetchDataFromTLE:AndLine2:' from incompatible pointer type
这是正常的。 所以我想将我的NSString *转换为char *,但我发现只有一种方法可以将NSString *转换为const char *。
const char *AAA1 = [line1 UTF8String];
演员表是正确的,但是如果调用我的方法我有这个错误
warning: passing argument 1 of 'fetchDataFromTLE:AndLine2:' discards qualifiers from pointer target type
所以我想把che const char *转换为char * ...而且我知道的唯一方法是使用strcpy。
这样:
#include <stdio.h>
#include <string.h>
...
char *a;
strcpy(a, AAA1);
不起作用,因为应用程序崩溃了!
我该怎么办?
谢谢!
答案 0 :(得分:3)
由于您使用的是objective-c,为什么不将NSString
作为参数,然后在函数内部进行转换。这将使您的代码在需要调用方法时更容易使用。
-(void)fetchDataFromTLE:(NSString*)line1 AndLine2:(NSString*)line2
{
const char *szLine1 = [line1 UTF8String];
const char *szLine2 = [line2 UTF8String];
...
//Use the the char * only within the method
}
您的代码将如下所示
[self fetchDataFromTLE:[[NSUserDefaults standardUserDefaults] objectforkey:@"line1"]
AndLine2:[[NSUserDefaults standardUserDefaults] objectforkey:@"line2"]];
答案 1 :(得分:2)
当您执行strcpy时,您的应用程序崩溃了,因为您尚未分配。
char *a; //This doesn't actually point to anything
strcpy(a, AAA1);
你想要做的是:
char *a = (char*)malloc(strlen(AAA1)+1);
strcpy(a, AAA1);
//perform your operations using a...
free(a);
如果可能的话,我建议调整你的函数,因为你在objective-c中工作,你应该使用objective-c对象(NSString *)。
答案 2 :(得分:1)
你是对的,你不能将NSString转换为基本类型,因为NSString是一个对象。
只要您确定所调用的函数不会修改指针指向的值,您就可以安全地将UTF8String
的结果转换为char *
。否则,您将遇到NSString对象的问题。
如果需要修改指针,则分配另一个指针,然后使用strcpy。