2011-05-03 69 views
0

我與這個方法的NSString *爲char *鑄造問題

-(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 

所以我鑫卡特投切爲const char *到一個char * ... ...和唯一途徑我知道是使用strcpy。

這樣:

#include <stdio.h> 
#include <string.h> 

... 

char *a; 
strcpy(a, AAA1); 

不工作,因爲該應用程序崩潰!

我該怎麼辦?

謝謝!

+0

這是一個警告,而不是錯誤。你也可以轉換爲'(char *)[@「foo」UTF8String];' – Eimantas 2011-05-03 14:58:04

+0

既然'UTF8String'返回一個'const char *'並且你的方法需要'const char *'params,我不明白爲什麼你首先得到警告。除非你的方法需要'char *'params ... – albertamg 2011-05-03 15:08:58

回答

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"]]; 
+0

太棒了!謝謝 ;) – JAA 2011-05-03 15:32:49

1

你說得對,你不能將NSString強制轉換爲原始類型,因爲NSString是一個對象。

只要您確定您調用的函數不會修改指針指向的值,就可以安全地將UTF8String的結果轉換爲char *。否則,您將遇到NSString對象的問題。

如果您需要修改指針,然後分配另一個,並使用strcpy。

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的)。