将double数组转换为string数组时的值错误

时间:2015-11-22 16:12:18

标签: c

我想将double数组转换为string数组。但循环后出现问题。

double * data = {1,5,6};
int32_t n_data = 3;
char ** array;
for (j = 0 ; j < n_data ; j++) {
    sprintf(buf,"%.2f",data[j]);
    array[j] = buf;
    printf("string_array %i in loop: %s\n" , j, array[j]);
}

for (j = 0 ; j < n_data ; j++) {
    printf("string_array %i after loop: %s\n" , j, array[j]);
}

我期望在循环中和循环之后得到相同的printf。然而输出是以某种方式:

 string_array 0 in loop: 1.00
 string_array 1 in loop: 5.00
 string_array 2 in loop: 6.00
 string_array 0 after loop: 6.00
 string_array 1 after loop: 6.00
 string_array 2 after loop: 6.00

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

array[j]存储指向char *的指针。每次执行array[j] = buf时,您只需将buf的位置存储在array[j]中。因此,在运行代码后,您的array看起来像:

array[0] -> buf
array[1] -> buf
array[2] -> buf

这就是为什么它们都具有相同的价值。它们都指向相同的字符串。

每次转换都需要一个新的缓冲区。您可以自己致电malloc每次获取新缓冲区或改为array[j] = strdup(buf);