【问题标题】:char pointer value in array数组中的char指针值
【发布时间】:2013-06-26 07:30:35
【问题描述】:

我有以下代码,它使用 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);

【问题讨论】:

  • table[i][5+(i/2)] = *ptr; 是正确的。分段错误是因为i 超出了表格尺寸。

标签: c pointers


【解决方案1】:

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

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

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

【讨论】:

  • 所以你的目的是让我增加数组的维度??
  • @dali1985 不!您应该确保i 不超过尺寸。这表明您的逻辑不好,您应该重新考虑循环并在向表中插入值之前执行一些检查。
【解决方案2】:

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

因此,如果您没有遇到系统故障,您会很幸运。 但是表格似乎无关紧要,因为您的最后一行代码,到目前为止我可以看到这个,只打印 number, hr em>、dww 和 vcc 在屏幕上。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2018-04-05
    • 1970-01-01
    • 2015-10-26
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多