Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C scanf覆盖全局声明的结构数组_C_Arrays_Memory_Buffer_Structure - Fatal编程技术网

C scanf覆盖全局声明的结构数组

C scanf覆盖全局声明的结构数组,c,arrays,memory,buffer,structure,C,Arrays,Memory,Buffer,Structure,我发现在将字符串扫描到缓冲区时,我的结构数组被覆盖,我可能共享相同的内存,但我不知道如何修复它 结构和结构全局声明数组 。。。数组中节点的某些操作 插入函数 现在我把字符串扫描成buff 每次应用第一个条件时,结构数组中的char*字符串就会被数组中每个元素上的字符串“print”覆盖 在scanf(“%s”,buff) 所以当我想要打印时,它看起来像这样: 节点[0] -数字(10) -字符串(“打印”) 节点[1]-编号(25)-字符串(“打印”) 等等 顺便说一句,我不能改变while

我发现在将字符串扫描到缓冲区时,我的结构数组被覆盖,我可能共享相同的内存,但我不知道如何修复它

结构和结构全局声明数组

。。。数组中节点的某些操作

插入函数

现在我把字符串扫描成buff

每次应用第一个条件时,结构数组中的char*字符串就会被数组中每个元素上的字符串“print”覆盖

scanf(“%s”,buff)

所以当我想要打印时,它看起来像这样:

节点[0] -数字(10) -字符串(“打印”)
节点[1]-编号(25)-字符串(“打印”)
等等

顺便说一句,我不能改变while循环

谢谢您的帮助。

问题是这行:

nodes[lastIndex].string = string;
请注意,
char*
本身不是字符串,实际上只是指向内存中某个字符数组的指针

通过上述分配,所有节点都指向完全相同的内存位置
buff
,因此所有节点都看到完全相同的文本,当您最终想要打印时,这些文本将被“打印”:

buff  <----------------
            |    |     |
nodes[0].string  |     |
      nodes[1].string  |
          nodes[2].string
            .
             .
              .
或者,复制已在外部的字符串:

insert(strdup(buff), number);

请注意,
strdup
会分配新内存,因此不要忘记在不再需要时再次释放字符串以防止内存泄漏。

不清楚什么是
str
,是否为
节点[…]分配内存。string
?。。。请在节点数组中的节点中发布一些基本的插入字符串,如果我在控制台中键入“插入字符串”,它将在节点数组中的特定节点中插入此字符串。但当我输入“print”时,它应该打印最新的一个。是的,但是最近一个的char*字符串是“print”,这并不能回答评论中的问题。什么是
str
,您是否为
节点[x].string分配内存?你应该添加MCVE是有原因的。我编辑了这个问题。我没有分配任何内存。是的,我没有意识到我只分配了一个指针。Strdup()解决了这个问题,谢谢。
nodes[lastIndex].string = string;
buff  <----------------
            |    |     |
nodes[0].string  |     |
      nodes[1].string  |
          nodes[2].string
            .
             .
              .
nodes[lastIndex] = strdup(buff);
insert(strdup(buff), number);