为什么我的输出有垃圾值,以及如何解决它?

#include<stdio.h>

struct info {
    char album[30];
    int released;
    char group[30];
};

int main() {
    FILE * fpt; 
    int size;
    struct info band[size];
    int i;

    printf("How many groups would you like to input: ");
    scanf("%d",&size); 

    for (i=0; i<size; i++) {

        printf ("Input what group: ");
        scanf(" %s",band[i].group);    

        printf("Input released date: ");
        scanf(" %d",&band[i].released);

        printf("Input what album: ");
        scanf(" %s",band[i].album);

    }

    fpt = fopen("records.dat","w");
    // printf("Group\t\tReleased\t\tAlbum\n");

    for (i=0; i<size; i++) {
        fprintf(fpt,"%s\t\t%d\t\t%s\n",band[i].group,band[i].released,band[i].album);
    }

    printf("File created.\n");
    fclose(fpt);
}

这是output

ø-605554032熵// //下一行输出正确

creamll 回答:为什么我的输出有垃圾值,以及如何解决它?

在这里,您对波段数组的内存分配存在问题。当您编写“结构信息带[size]”时,您实际上是对计算机说:“请为我创建大小结构,并在堆栈中找到它们的位置”。但是,由于以下两个原因,在这里无法发生这种情况:

  1. 正如我上面的评论所述,当该行发生时,变量大小未初始化。

  2. 即使您有这样的代码:size=3; struct info band[size]也无法正常工作,因为程序必须知道在编译时应该为堆栈上的band数组创建多少空间 当在运行时设置大小变量时使用strong>-使用malloc可以解决此问题:scanf(%d,&size); struct info * band = (struct info*)malloc(sizeof(struct info) * size);这将为堆栈上的数组创建仅4个字节(即:指针大小)同时为堆上的实际数组动态分配相关内存。

在主函数的结尾,不要忘记添加free(band);

祝你好运!

本文链接:https://www.f2er.com/2666979.html

大家都在问