【问题标题】:Array of a struct with strings带有字符串的结构数组
【发布时间】:2015-07-09 06:38:12
【问题描述】:

我已经定义了一个结构

struct subject
{
    char name[100];
    int year;
};

由于我需要其中的 n 并且我必须使用 malloc 我在我的主要功能中执行了以下操作:

int n, i;
scanf("%d", &n);
struct subject *ptr = malloc(n*sizeof(struct subject));

不幸的是,当我尝试使用此代码输入内容时:

for(i = 0; i < n; i++)
{
   gets((ptr + i)->name);
   scanf("%d", (ptr + i)->year);
}

我输入名字后它崩溃了。该任务需要使用malloc

这是整个代码(不幸的是,它是我的母语,所以有点不同)

#include <stdio.h>
#include<stdlib.h>

#ifndef DEBUG
#define DEBUG(...)printf(_VA_ARGS_)
#endif

struct kolegij
{
    char naziv[100];
    int semestar;
};

int main(){
    int brPredmeta, i;

    scanf("%d", &brPredmeta);

    struct kolegij *ptr = malloc(brPredmeta*sizeof(struct kolegij));

    if(ptr == NULL)
    {
       printf("error\n");
       return 0;
    }

    for(i = 0; i < brPredmeta; i++)
    {
       //gets(ptr->naziv);
       gets((ptr + i)->naziv);
       scanf("%d", &(ptr + i)->semestar);
       getchar();
    }

    for(i = 0; i < brPredmeta; i++)
    {
       printf("%s\n", ptr[i].naziv);
       printf("%d\n", ptr[i].semestar);
    }

    return 0;
}

关于重复问题。我相信这不应该是重复的,因为它与结构和指针有关。我之前遇到过 scanfs 的问题,我没有将其视为解决方案,因此我认为不应将其标记为重复。

【问题讨论】:

  • 你的第二个 scanf 需要一个指向你读入的变量的指针。添加一个 &。
  • 正在打印第二个名字吗?
  • 我在 scanf 中添加了一个 & 但现在它在名字和年份之后停止输入,并打印出以下 RANDOMNUMBER 主题名称主题年份
  • ENTER 键中的换行符在输入缓冲区中。最简单(但很脆弱)的解决方案是添加一个 getchar();在scanf之后。

标签: c string struct malloc


【解决方案1】:

Malloc 返回一个 void 指针类型。为了将它用作指向您的结构的指针,您必须先转换它。尝试使用 malloc 将行更改为:

int n, i;
scanf("%d", &n);
struct subject *ptr = (struct subject*) malloc(n*sizeof(struct subject));

您还必须将输入更改为:

for(i = 0; i < n; i++)
{
   gets((ptr + i)->name);
   scanf("%d", &((ptr + i)->year));
}

【讨论】:

猜你喜欢
  • 2017-03-03
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 2012-01-22
  • 2013-07-13
  • 2014-02-21
  • 2011-08-04
相关资源
最近更新 更多