我想将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
我该如何解决这个问题?
答案 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);
。