我正在使用realloc将一些数据分配到记忆
中我打印char数组/ char值没有问题,但只有我遇到问题的小数
const conditions = [{
type: 'A',
rank: 10
}, {
type: 'B',
rank: 10
}, {
type: 'A',
rank: 16
}, {
type: 'B',
rank: 16
}];
const transformed = conditions.reduce((result, item) => {
const itemIdx = result.findIndex(condition => condition.type === item.type && condition.rank < item.rank);
if (itemIdx !== -1) {
result.splice(itemIdx, 1, item);
} else {
result.push(item);
}
return result;
}, []);
console.log(transformed);
输出
size_t N_att;
typedef struct student_struct {
char *name;
int32_t age;
int32_t marks;
} STUDENT;
STUDENT*STUDENTS;
STUDENTS= realloc(STUDENTS, (N_att + 3) * sizeof(*STUDENTS));
STUDENTS[N_att].name = "James";
STUDENTS[N_att++].age = 20;
STUDENTS[N_att+2].marks = 100;
STUDENTS[N_att] = (STUDENT) { NULL };
//testing to print the 1st entry only
printf("%s %d %d", STUDENTS[0].name, STUDENTS[0].age, STUDENTS[0].marks);
我不知道这里有什么问题,它正在打印出内存中值的指针。 如果我在打印十进制的错误方向
,请纠正我答案 0 :(得分:1)
您还没有给出最小的可编辑示例,因此很难说出您在这些不可见的代码部分中做错了什么。
我的猜测是你没有初始化N_att
变量,因此未定义realloc()
的结果。
此外,在分配STUDENTS
,"James"
和20
时,您使用三种不同的表达式来计算100
数组的索引,这看起来很奇怪......这三项任务看起来像初始化单结构;如果是这样,那三个都应该使用相同的索引。
答案 1 :(得分:1)
因为您正在将值初始化为不同的索引并使用0索引进行打印。 CiaPan在评论中提及你的代码看起来很奇怪。如果您要打印0索引的值,那么您应该使用相同的索引。
#include <stdio.h>
#include <stdlib.h>
size_t N_att;
typedef struct student_struct
{
char *name;
int age;
int marks;
} STUDENT;
STUDENT*STUDENTS;
int main()
{
STUDENTS = realloc(STUDENTS, (N_att + 3) * sizeof(*STUDENTS));
STUDENTS[N_att].name = "James"; // here you initialized in 0th index
STUDENTS[N_att++].age = 20; // same here but N_att incremented by one
STUDENTS[N_att+2].marks = 100; // here index is (updated index + 2 = 3)
STUDENTS[N_att] = (STUDENT) { NULL }; // here you init it to null
// Here you are printing 0 th index which has only "James" "20"
printf("%s %d %d\n", STUDENTS[0].name, STUDENTS[0].age, STUDENTS[0].marks);
}
注意: - 再次检查,输出应为“James”“20”“垃圾值”