【问题标题】:how to pass Char array in a method如何在方法中传递 Char 数组
【发布时间】:2012-07-24 06:19:20
【问题描述】:

任何人都可以帮我在尝试时将 char 数组传递给方法,它只是复制一个索引值,所以

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

【问题讨论】:

    标签: iphone objective-c methods char


    【解决方案1】:

    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]);
    
    }
    

    【讨论】:

    • 我仍然无法检索值是他们的任何方法,就像-(char *)mountLVparams:(signed char *)initData :(char **)obj[3] :(signed char *)codeWard这样,当我调用此方法时,我得到不兼容的指针类型发送'char * [3]'到参数输入'char *'这个警告
    • 试试这个 -(void)MethodA { char c1[]={"A"};字符 c2[]={"B"};字符 c3[]={"C"};字符 *c[3]; c[0] = c1; c[1] = c2; c[2] = c3; [自挂载LVparams:c]; } -(void)mountLVparams:(char **)obj { int i; for(i=0;i
    【解决方案2】:

    我有一个解决方案,将数组传递给您的函数,然后创建 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];
    

    现在函数是这样的,你将通过 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]);
    

    【讨论】:

      【解决方案3】:

      也许,您会寻找以下内容,您可以在其中传递带有所需内容的 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.
      }
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-07
          • 1970-01-01
          • 2017-11-13
          相关资源
          最近更新 更多