如何通过在方法

问题描述:

谁能帮我传递字符数组的方法,当我试图它只是复制一个索引值,如何通过在方法

char c1[]={0x01}; 
char c2[]={0x02}; 
char c3[]={0x03}; 
char *c[3]; 
c[0] = c1; 
c[1] = c2; 
c[2] = c3;//if i pass this char array to the below method only c[0] is copied 
char* arrrr =[self mountLVparams:NULL :c :code_ward_arr];  
//my method being this 
-(char *)mountLVparams:(signed char *)initData :(char *)obj :(signed char *)codeWard 

c是指向指针的指针。你的方法签名应该像-(char *)mountLVparams:(signed char *)initData :(char **)obj :(signed char *)codeWard

char c1[]={0x01}; 
char c2[]={0x02}; 
char c3[]={0x03}; 
char *c[3]; 
c[0] = c1; 
c[1] = c2; 
c[2] = c3;//if i pass this char array to the below method only c[0] is copied 
char* arrrr =[self mountLVparams:NULL :c :code_ward_arr];  

-(char *)mountLVparams:(signed char *)initData :(char **)obj :(signed char *)codeWard 
{ 
    int i; 
    for(i=0;i<3;++i) 
     printf("%d----%c", i,*obj[i]); 

} 
+0

仍然无法retieve值是他们的任何方法lik' - (char *)mountLVparams :(signed char *)i nitData:(char **)obj [3]:(signed char *)codeWard'像这样当我调用这个方法即时获取**不兼容的指针类型发送'char * [3]'到类型'char *'的参数* *此警告 – 012346 2012-07-24 07:11:34

+0

试试这个 - (void)方法A \t {\t \t char c1 [] = {“A”}; \t char c2 [] = {“B”}; \t char c3 [] = {“C”}; \t char * c [3]; \t c [0] = c1; \t c [1] = c2; \t c [2] = c3; \t [self mountLVparams:c]; } - (void)mountLVparams :(char **)obj { \t int i;对于(i = 0; i 2012-07-24 07:13:28

参数c是指针指向的字符数组字符数组。指针将指向数组的第一个地址,因此它默认为c[0]

您可以将它作为NSstring传递。 [NSString stringWithFormat:%s,c]

我有一个解决方案通过传递数组给你的函数,然后创建的char *

const char c1[]={0x01}; 
    NSString *s1 = [[NSString alloc] initWithCString:c1 encoding:NSUTF8StringEncoding]; //convert into string 

    const char c2[]={0x02}; 
    NSString *s2 = [[NSString alloc] initWithCString:c2 encoding:NSUTF8StringEncoding]; //convert into string 

    const char c3[]={0x03}; 
    NSString *s3 = [[NSString alloc] initWithCString:c3 encoding:NSUTF8StringEncoding]; //convert into string 

    NSArray *arr = [NSArray arrayWithObjects:s1,s2,s3,nil]; // adding all strings 
    [s1 release]; 
    [s2 release]; 
    [s3 release]; 

现在功能会是这样的,其中u将通过ARR(NSArray中) :

-(char *)mountLVparams:(signed char *)initData :(NSArray *)arrChars :(signed char *)codeWard 
{ 

int count = [arrChars count]; 
char *cargs = (char *) malloc(sizeof(char) * (count + 1)); 
//cargs is a pointer to 4 pointers to char 

int i; 
for(i = 0; i < count; i++) { 
    NSString *s = [arrChars objectAtIndex:i];//get a NSString 
    const char *cstr = [s cStringUsingEncoding:NSUTF8StringEncoding];//get cstring 
    int len = strlen(cstr);//get its length 
    char *cstr_copy = (char *) malloc(sizeof(char) * (len + 1));//allocate memory, + 1 for ending '\0' 
    strcpy(cstr_copy, cstr);//make a copy 
    cargs[i] = cstr_copy;//put the point in cargs 
} 
cargs[i] = NULL; 
NSLog(@"%c | %c| %c ",cargs[0],cargs[1],cargs[2]); 
return cargs; 
} 

信用创造从字符串数组炭去@yehnan遵循objective-c nsarray to c array

使用这样的:

char *cs = [self mountLVparams:(your arguments here and pass array here)]; 
    NSLog(@"%c | %c | %c",cs[0],cs[1],cs[2]); 

也许,你会寻找以下在那里你可以与所需的内容作为参数传递NSString对象:

NSString *_string = [NSString stringWithString:@"\x01\x02\x03"]; 
[self yourMethod:_string]; 

和内部-yourMethod:

- (void)yourMethod:(NSString *)stringWithChars { 
    char _ch = [stringWithChars characterAtIndex:1]; // it gives back you an unsigned short but in this case you can use this value as char without any problem 
    NSLog(@"chat at index #1 : %d, %c", _ch, _ch); // or do whatever you'd like to do. 
}