【发布时间】:2018-07-15 19:50:21
【问题描述】:
在代码中,当我打印 var_value 时,它会显示它的内容,但是当我需要稍后在 if else 语句中分配它时,它仅在最后一个 IF 中为空,我不知道为什么会这样。如果我删除最后一条语句,其他三个都可以通过。
while ((read = getline(&line, &len, f)) != -1){
printf("%s\n", line);
char *token;
token = strtok(line, "=");
var_name = token;
/* Separate every line by the '=' character */
while( token != NULL ) {
var_value = token;
token = strtok(NULL, "=");
}
printf("%s\n", var_name);
printf("%s\n", var_value);
// Obtain the parameters
if (strcmp(var_name, "puerto") == 0) {
puerto = atoi(var_value);
parameters_count += 1;
} else if (strcmp(var_name, "tamano_tabla") == 0) {
tamano_tabla = atoi(var_value);
parameters_count += 1;
} else if (strcmp(var_name, "periodo_archivo") == 0) {
periodo_archivo = atoi(var_value);
parameters_count += 1;
} else if (strcmp(var_name, "archivo_tabla") == 0) {
printf("%s var val\n", var_value);
strcpy(archivo_tabla, strtok(var_value, "\n")); //Remove \n and copy to destination variable
parameters_count += 1;
printf("%s filetabla\n", archivo_tabla);
}
}
编辑:控制台中的结果,在最后一个之后,分段错误
puerto=1212
puerto
1212
archivo_tabla=tabla.xml
archivo_tabla
tabla.xml
tabla.xml
var val
【问题讨论】:
-
你知道
strtok修改了它的第一个参数吗? -
这里不足以说明问题所在。请使用minimal reproducible example 更新您的问题。
-
我们对问题可能是什么有一些猜测,但您没有给我们足够的信息来给您一个自信的答案。提交minimal reproducible example,不要忘记在其中包含一些会产生不良行为的输入。
-
添加了完整的while代码
-
@purplepsycho:更糟糕的是,它使用全局状态,因此尝试在被标记化的字符串之间来回切换(即使在完全不同的函数中)将不起作用。
strtok_r(Windows 上为strtok_s)至少可以避免这个问题。