我有一个代码,可以从文本文件中读取并搜索特定的单词(更具体地讲是诸如“ 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从未初始化。

10-06 00:44