为数组中的每个元素添加值?

时间:2014-05-07 18:03:34

标签: c

我试图动态地将值插入到数组的每个元素中,但无法使其工作。

char itemCodeToSend[100]; 

所以我使用'strcpy`

        char itemCode[100]  = "F,T,H";// So on
        char *  p    = strtok (itemCode, ","); // Parsing using comma
        int n_spaces = 0, i; 
        int position = 0;    

        while (p) { 
          strcpy(&itemCodeToSend[position],p);
          printf("<p>%i %s",position,&itemCodeToSend[position]);  
          position++;
          p = strtok (NULL, ",");
        }

      // Trying to print the array
        i=0;
      for (i; i < 34; i++){
          printf ("res[%d] = %s\n", i, &itemCodeToSend[i]);  
       }

打印我期待的是

itemCodeToSend[0] = "F";
itemCodeToSend[1] = "T";
itemCodeToSend[2] = "H"; 

但我得到的是

itemCodeToSend[0] = "FTH";
itemCodeToSend[1] = "TH";
itemCodeToSend[2] = "H";   

不确定如何处理。

3 个答案:

答案 0 :(得分:3)

如果我正确地理解了你的问题,那么它非常直接。如果你只需要解析comma分隔的字符,那么一个简单的while循环就足够了。不需要在不需要的情况下使用繁重的功能来使事情复杂化。

   #include <stdio.h>
    int main(){

        char itemCode[100]  = "F,T,H";  // So on
        int i = 0,j=0;
        while (itemCode[i] != '\0') { 
            if(itemCode[i] == ',');
            else{
                printf("itemCodeToSend[%d] = \"%c\"\n",j,itemCode[i]);
                j++;
            }
            i++;
        }
        return 0;
    }

输出:

itemCodeToSend[0] = "F";
itemCodeToSend[1] = "T";
itemCodeToSend[2] = "H"; 

我知道你不应该只想打印已解析的角色,但无论你想做什么,你总是可以把你的逻辑放在while循环中。

答案 1 :(得分:1)

看起来你用字符串混淆了字符。在C:

  • char是字节类型。它可以包含单个字符(实际上取决于编码)。
  • char[N]是一个N字节的数组。它可以看作是一个最多N-1个字符的字符串,NUL终止。它会在大多数用途上衰减到char*,可以看作是一个未指定最大长度的NUL终止字符串。

如果你想要一个100个字符串的数组,每个字符串最多19个字符,你可以写:

char arrayOfStrings[100][20];

其余代码似乎对我而言。

答案 2 :(得分:0)

最后使用下面的替换代码使其工作。我认为问题是strcpy。我通过替换

获得了预期的输出
strcpy(&itemCodeToSend[position],p);

使用以下代码

itemCodeToSend[position] = strtol(p, 0, 16); 

希望它会帮助像我这样的人。