0

我有以下代码,它使用 strtok 获取一些字符标记,并将这些标记一一保存在表中,最后打印这些标记。我的错误在 TABLE 行:

error: invalid conversion from 'char* to 'char''

我对指针和字符有误解,我不知道如何编写 TABLE 行((我希望具有以下格式))。我尝试了类似的东西

table[i][5+(i/2)] = *ptr;

但我有分段错误。

i = 0;
int offset = 5;
char* ptr;
ptr = strtok(buff,"do something");
char table[1][10];       
while (ptr != NULL)
 {
  if (i == 0)
     strcat(machine, ptr);
  if (i == 2)
     strcat(number, ptr);
  if (i == 4)
     strcat(hr, ptr); 
  if (i == 6)
     strcat(dw, ptr); 
  if (i == 8)
     strcat(vcc, ptr);
  ptr = strtok(NULL,"do something");
  table[i][5+(i/2)] = ptr;     
  i++;
 }
printf("Final: %s, %s, %s, %s, %s\n", machine, number, hr, dw, vcc);
4

2 回答 2

3

table[i][5+(i/2)] = ptr; 是错误的,因为您试图分配地址而不是值。

table[i][5+(i/2)] = *ptr;是正确的。它将给出 的值ptr

分段错误是因为i. 它指的是一个超出数组边界的地址。

于 2013-06-26T07:38:26.487 回答
0

您缺少一些变量和内存设置。变量机器应该分配足够的内存来存储你的字符串。numberhrdwwvcc相同。然后,您的table变量已编码,其中只能存在一 (1) 个条目 - 换句话说:您的 table[1] 无效,因为它没有足够的空间来“添加”指向它的指针。table[1] 之后的数组 - 也是 [10] ( table[1][10] )表示长度/大小为 10 个字节的每个表项(这里只有一个)。因此,您只需编写一个“char”数组,它可以包含十 (10) 个字符。这给出了一个“静态”文字/字符串。

因此,如果您没有遇到系统故障,您可能会很幸运。但是 table 似乎无关紧要,因为你的最后一行代码,到目前为止我可以看到这个,只在屏幕上打印numberhrdwwvcc 。

但这不仅仅是错误。在所有这些代码之前,您应该在

char *ptr;
ptr = strtok(buff,"do something");

因为你没有为 ptr 分配内存,上面一行。

于 2021-09-09T09:43:55.790 回答