我正在使用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的事吗?它不应该活着吗?
答案 0 :(得分:0)
正如Ruud Helderman所说,通过
只读一个字符scanf(“%1 []]”,&amp; end)
并不意味着它不是一个字符串(因此以null结尾)。显然,我进入缓冲区溢出。
全部谢谢