2014-05-07 45 views
2

我试图插入值动态数组的每个元素,但不能使它的工作。为数组中的每个元素添加值?

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

不知道如何来处理这个问题。

+0

你能粘贴编译的代码吗? – 4pie0

+0

如果您是“C新手”,并且*不知道C++,请勿跨越标签。现代语言彼此非常不同。 – crashmstr

+1

你可以在打印输出的地方发布命令吗? – Micka

回答

1

看来你是混淆字符与字符串。在C:

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

如果你想100个字符串数组高达每19个字符,你可以写:

char arrayOfStrings[100][20]; 

你的代码的其余部分,似乎我的权利。

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循环中的逻辑。

+0

谢谢Utkal。是的,它简单又好看。+ 1。其实我试着做你喜欢的东西,但在比较两个字符串时出错。我知道我做错了,我用'strcmp'来比较char [i]和常量字符串。这就是为什么我走在这条路线,并张贴我的答案。 – GoCrazy

0

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

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

希望这将有助于像我更换

strcpy(&itemCodeToSend[position],p); 

得到预期的输出。

相关问题