【发布时间】:2013-03-11 01:54:49
【问题描述】:
我正在编写输入文件并将每个单词作为单独的 char* 读取的代码,如下所示:
char label[8];
char type[5];
char value[6];
while (!input.eof()) {
input >> label;
input >> type;
input >> value;
storeSymbols(label, type, value);
}
然后我将它设置为 char* 数组的元素,如下所示:
void storeSymbols(char* lab, char* type, char* val) {
labels[symCount] = lab;
types[symCount] = type;
values[symCount] = val;
symCount++;
}
但是,当我打印出 char* 数组的所有元素时,所有元素都与从文件中检索到的最后一个元素相同。例如,如果文档中有三个标签,分别定义为“一”、“二”和“三”,那么在第一次循环结束时,数组将包含“一”,第二次将包含“二”和“二”,第三次将包含“三”“三”和“三”。它还循环了一个额外的时间,将最后一个元素再次添加到数组中,使其成为数组中的四个“三”元素。有谁知道为什么会这样?
我也对此进行了测试,我将 value 转换为 int 并将其添加到 int 数组中,它工作正常。
【问题讨论】:
-
第二位代码是否也在第一位代码的循环内?
-
我认为我们需要更多代码。
-
您需要复制/复制字符串,而不是一遍又一遍地分配指向同一个缓冲区的指针(这就是您现在正在做的事情)。
-
不,第二位在单独的方法中,三个数组是全局变量。另外,你还想要什么代码?
-
所显示的 sn-ps 给人的印象是您正在迭代 complete 输入,首先丢弃收集到的任何信息,然后只分配最后读取的值。跳过整个输入后,仅将 symCount 一次从 0 增加到 1。要准确了解发生了什么,需要更多代码。