我现在正在学习一些c,并且必须为大学做一些练习。我需要一个双数组,应该填充int值。所以我就是这个。
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] ) {
int size=0, i=0;
printf("Enter size of array: ");
scanf("%d", &size);
double* field = malloc(size * sizeof(double));
double value;
for(i=0; i<size; i++) {
field[i] = i;;
}
for(i=0; i<size; i++) {
printf("Field%i: %d\n",i, field[i]);
}
free(field);
return 0;
}
但是,当我执行它时,所有值都设置为0。
Enter size of array: 10
Field0: 0
Field1: 0
Field2: 0
Field3: 0
Field4: 0
Field5: 0
Field6: 0
Field7: 0
Field8: 0
Field9: 0
答案 0 :(得分:6)
printf
&#39; s %d
代表十进制整数,而不是 double 。
所以这一行:
printf("Field%i: %d\n",i, field[i]);
应该是:
printf("Field%i: %f\n",i, field[i]);
使用错误的格式说明符是您之前使用的 undefined behavior 。
来自standard
如果任何参数不是相应的正确类型 转换规范,行为未定义。
同时检查malloc
的返回值。它让您知道分配是否失败(返回NULL
)。
<子> 更多来自David C. Rankin的评论
%d
格式 说明符在内存中查找4
- 字节(sizeof int
字节) 根据您的机器的endianess排序。当你提供了 8字节(sizeof double
)值由符号位组成,标准化 指数和尾数,它不知道如何处理它。
在printf
这里,我们可以使用%f
代替%lf
,这也增加了与C99之前版本的兼容性,而且它更短。 (chux指出这一点)。 子>
答案 1 :(得分:-1)
我不认为malloc函数是否为数组分配了内存。检查malloc的语法以及返回类型。