我有一个代码,可以从文本文件中读取并搜索特定的单词(更具体地讲是诸如“ CH3”之类的物种名称),然后读取其下方列出的数据。我声明一个函数void read_data(char *fargs[], double *data)
,其中fargs
是一个字符串数组,其中包含文件名和在main中声明的种类名称。然后,为了确保使用strstr
找到正确的物种名称(例如,“ CH3”而不是“ CH3ONO2”),我编写了一个简短的循环,在物种名称的两侧放置空格。
char *spec;
int x;
spec[0] = ' ';
while (fargs[1][x]) {
spec[x+1] = fargs[1][x];
x++;
}
spec[x+1] = ' ';
spec[x+2] = '\0';
因此,问题在于,当我这样做时,程序稍后会给出分段错误(不适用于strstr,无论是否存在循环,它都可以正常运行)。虽然当我不包括该循环并仅对
fargs[1]
进行所有操作时,该程序就可以运行,但有时会发现错误的物种名称,就像上面给出的假设一样。即使我只包含循环,但以后再也不使用spec
,它也不起作用,这向我暗示我正在某种程度上修改循环中的fargs[1]
。另外,为澄清起见,我稍后在strcmp
上使用fargs[1]
,因此即使我只是在声明中包括空格,我也必须以类似的方式操作fargs[1]
来删除空格。我可以完全发布更多代码,程序输出,正在读取的文本文件的示例,等等,如果有帮助,我只是不想发布大量的代码,如果不回答该问题,该怎么办?它。 最佳答案
spec
从未初始化,因此当您从spec[0]
中的规范读取时,这将导致未定义的行为。
您的代码的另一个问题是x
从未初始化。