2012-04-24 13 views
1

配列にCで値を代入する際に質問があります。私は、それぞれ14 'セクションの長さの新しい文字列の配列に分割したい文字列を持っています。Cで配列を塗りつぶします

int main(int argc , char *argv[]) 
{ 
char string[]="50 09 00 00 98 30 e0 b1 0d 01 00 00 00 00 4f 09 00 00 98 30 c6 b1 0d 01 01 01 01 50 09 00 00 98 30 e0 b1 0d 01 00 00 00 00 4f 09 00 00 98 30 c6 b1 0d 01 01 01 01"; 

char delim[] = " "; 
char *result = NULL; 
char *strArray[1440] = {0}; 
int i = 0; 
result = strtok(string, " "); 

while (result) 
{ 
strArray[i] = result; 
result = strtok(NULL, delim); 
i++; 
} 

// Now I have each 'section' of the original string in strArray[xx] 

int z = 1022; 
int c; 
char arr[5000]; 
char *finalarr[100] = {0}; 
char buff[100]; 
int l = 0; 

for(c=0;c<z;++c) 
{ 
    strcat(arr,strArray[c]); 
    if (c % 14 == 13) 
    { 
    // print the value so far for check, this gives an output of 28 chars 
    puts(arr); 
    // copy value of arr to buff 
    ret = sprintf(buff,"%s", arr); 
    // copy value of buff to instance of finalarr 
    finalarr[l] = buff; 
    // empty arr 
    strcpy(arr," "); 
    l++; 
    } 
} 

// both have the same value (last value of arr) 
printf("finalarr1 = %s\n",finalarr[1]); 
printf("finalarr20 = %s\n",finalarr[20]); 
} 

おそらく私はそれをあまりにも複雑な方法で解決しようとしています(私は願っています)。とにかく助けるべきいくつかの指示は高く評価されるでしょう。

+0

[。0x3A28213A 0x6339392C、0x7363682E](http://xkcd.com/138/) –

+0

は、あなたが例を与えることができますか? –

+1

私はちょうどあなたが立ち往生して何が表示されません - このコードは完全に動作し、あなたは簡単なアプローチがほしいですか?または、これは何らかの形で失敗し、デバッグに役立つ必要がありますか? – sarnold

答えて

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

int main(int argc , char *argv[]) 
{ 
    int i; 
    int fcount=0; 
    int acount=0; 
    char string[]="50 09 00 00 98 30 e0 b1 0d 01 00 00 00 00 4f 09 00 00 98 30 c6 b1 0d 01 01 01 01 50 09 00 00 98 30 e0 b1 0d 01 00 00 00 00 4f 09 00 00 98 30 c6 b1 0d 01 01 01 01"; 
    char *finalarr[100]; 
    char arr[29]="\0"; 
    for (i=0;i<(strlen(string));i++) 
    { 
     if ((i+1)%3!=0) 
     { 
      strncpy(&arr[acount],&string[i],1); 
      acount++; 
      if (acount==28) 
      { 
       acount=0; 
       arr[29]="\0"; 
       finalarr[fcount]=strdup(arr); 
       fcount++; 
      } 

     } 
    } 
    printf("finalarr1 = %s\n",finalarr[0]); 
    printf("finalarr1 = %s\n",finalarr[1]); 
    printf("finalarr1 = %s\n",finalarr[2]); 
    return 0; 
} 

結果:

finalarr1 = 500900009830e0b10d0100000000 
finalarr1 = 4f0900009830c6b10d0101010150 
finalarr1 = 0900009830e0b10d01000000004f 
1

あなたがラインを交換する必要があります。

finalarr[l] = strdup(arr); 

あなただけarrに格納されている文字列を複製する必要があるため:と

// copy value of arr to buff 
ret = sprintf(buff,"%s", arr); 
// copy value of buff to instance of finalarr 
finalarr[l] = buff; 

。変数buffは必要ありません。

そしてライン:

// empty arr 
strcpy(arr," "); 

と:

*arr = '\0'; 

あなただけの文字列arrを "リセット" する必要があるため。元の行では、元のテキストを「孤独な」領域に「置き換えた」だけです。

関連する問題