【问题标题】:Double dimension array, attribute value but can't read from it later二维数组,属性值,但以后无法读取
【发布时间】:2017-05-21 17:01:32
【问题描述】:

我正在孩子之间传递值,需要存储一些值以供以后使用。

函数中的定义和使用

char fouts[MAX_SIZE][10];

我给数组赋值的函数:

void connect(char *nodo, char *out[], int nouts) {
(...)
for(i=0;i<nouts;i++) {
                fouts[fnum][i] = out[i];
}
(...)

以及我尝试使用它们的功能:

void disconnect(char *nodo, char *remover){
char *outs[10];
nouts = fnouts[getfnum];
int m =0;
    for(i=0;i<nouts;i++) {
            if(strcmp(fouts[getfnum][i],nodo) != 0) { outs[m] = fouts[getfnum][i];  m++ ; }
}

无论我每次尝试最后执行此操作时都尝试修复它,它都会产生分段错误。

已经尝试过(例如直接读取 fouts[getfnum][0] 并给出分段错误,但 fouts[getfnum] 给出“垃圾”) 检查赋值后的值 fouts[fnum][i] = out[i];在这里,它检查出来了,所以我想那部分没问题)。

不知道它是否明显,但有什么帮助吗?

【问题讨论】:

  • 你通过nouts来连接而不是断开连接。断开连接如何得到nouts?
  • 不知道是不是有问题,char *outs[10] 是一个指向 10 个元素的数组的指针,但是你在写入之前从来没有分配过指针?如前所述,不知道这是否会导致任何问题。
  • @L.ScottJohnson 忘记在此处包含,但我得到了价值。编辑并添加了
  • @LudvigRydahl 我想这不是问题所在,因为例如,当我尝试执行 printf("%s",fouts[getfnum][0]);我遇到了分段错误。
  • fouts[fnum][i]char 但您将其分配给 out[i]char*

标签: c arrays multidimensional-array


【解决方案1】:

您正在混合charchar*

fouts[fnum][i] is a char

out[i] is a char pointer

所以在这一行

fouts[fnum][i] = out[i];

您将char pointer 分配给char,这是非法的。

在这一行

if(strcmp(fouts[getfnum][i],nodo) != 0)

您将char(即fouts[getfnum][i])传递给strcmp

这是不合法的,因为 strcmp 期望 char*

从发布的代码中,很难说出如何解决这些问题。也许你只需要:

char* fouts[MAX_SIZE][10];

【讨论】:

  • 它会发出警告,但即使我只做了 fouts[getfnum][i] 的 printf 仍然会出现分段错误。
  • @JoséMoreira - 你如何打印它?
  • 在 for 循环中,我将值归因于我打印的数组 fouts[getfnum][i] 的值,它打印正确。同时我改变了我的代码并且没有使用这个选项,无法让它工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2018-05-23
  • 2015-03-29
  • 1970-01-01
相关资源
最近更新 更多