我有一个代码,我从文本文件中读取并搜索特定单词(更具体地说是物种名称,例如“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]
以类似的方式删除空格。我完全可以发布更多代码、程序输出、我正在读取的文本文件的示例等它。