1

私が試したときに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
4

4 に答える 4

1

関数に配列を渡してからchar*を作成することで、1つの解決策があります。

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

文字列の配列からcharを作成するためのクレジットは、@yehnanに行きます 。Objective-cnsarrayからcarrayをフォローします。

このように使用します:

  char *cs = [self mountLVparams:(your arguments here and pass array here)];
    NSLog(@"%c | %c | %c",cs[0],cs[1],cs[2]);
于 2012-07-24T09:07:10.113 に答える
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]);

}
于 2012-07-24T06:42:54.547 に答える
1

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.
}
于 2012-07-24T09:32:42.137 に答える
0

パラメータcは、文字配列を指すポインタです。ポインタは配列の最初のアドレスを指すため、デフォルトではですc[0]

NSstringとして渡すことができます。[NSString stringWithFormat:%s,c]

于 2012-07-24T06:42:07.293 に答える