我试图动态地将值插入到数组的每个元素中,但无法使其工作。
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 :(得分: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);
希望它会帮助像我这样的人。