为什么while循环清除变量?

时间:2018-02-14 12:40:59

标签: c linux loops gcc scanf

我正在使用gcc版本7.2.0(Ubuntu 7.2.0-8ubuntu3)以及此程序:

int main(){
    double buffer;
    double *vec = NULL;
    int dim = 0;
    char end;

    printf("ej: (1.5 2 3.7).\tVector: ");
    scanf(" %*[()]");
    do{
        vec = (double *) realloc(vec, (dim+1) * sizeof(double));
        scanf(" %lf", &buffer);
        vec[dim++] = buffer;
    }while (!scanf(" %1[)]", &end));
    //<- Here dim returns to 0
    printf("\n\t( ");
    for (int componente=0; componente<dim; componente++)
        printf("%6.2lf", vec[componente]);
    printf(" )\n");

    return EXIT_SUCCESS;
}

dim变量返回0(但存在 - 至少gdb代表)。保持其价值的唯一方法是将其声明为静态。

我也尝试过编译而不进行优化。

我错过了一些关于C的事吗?它不应该活着吗?

1 个答案:

答案 0 :(得分:0)

正如Ruud Helderman所说,通过

只读一个字符
  

scanf(“%1 []]”,&amp; end)

并不意味着它不是一个字符串(因此以null结尾)。显然,我进入缓冲区溢出。

全部谢谢