比较后变量为空

时间:2018-02-05 20:57:32

标签: c strtok strcpy

在代码中,当我打印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

2 个答案:

答案 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