打印十进制值而不是指针

时间:2017-11-10 10:20:40

标签: c printf dynamic-memory-allocation realloc

我正在使用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);

我不知道这里有什么问题,它正在打印出内存中值的指针。 如果我在打印十进制的错误方向

,请纠正我

2 个答案:

答案 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”“垃圾值”