在代码中,当我打印var_value时,它显示了它的内容,但是当我需要稍后在if else语句中分配它时,它仅在最后一次为空,我不知道它为什么。如果我删除了最后一个语句,则其他三个语句没有问题。
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
答案 0 :(得分:1)
您的输出不支持您的争用
在代码中,当我打印var_value时,它会显示其内容,但是当我打开时 需要稍后在if else语句中分配它,它只是空的IN 最后一次[...]。
实际上,您的输出显示相反:var_val
打印得很好。我必须假设你被它的价值以换行符结束的事实感到困惑,换行也是印刷的。因此," var val"出现在一行的开头。这是var_val
的预期值,包括换行符,后跟" var val":
tabla.xml var val
getline()
提供的字符串中存在换行符是接下来发生的strtok(var_value, "\n")
的全部内容。或者我假设。
另请注意,虽然您提供的输出相对于您提供的代码似乎被截断,但在我的测试中,var_val
的内容也成功复制到变量archivo_tabla
,而不是那么讨厌换行符。
答案 1 :(得分:-1)
此行可疑:strcpy(archivo_tabla, strtok(var_value, "\n")); //Remove \n and copy to destination variable
strtok变异var_value。您好像是在" \ n"之后将archivo_tabla
复制到var_value的剩余部分。 (这没有任何意义)
https://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm