Malloc和Struct

时间:2018-01-11 16:52:46

标签: c struct malloc

我面临着malloc和结构的一些困难。我想读取我的代码中显示的m_data.number_chars(这是一个整数)作为我想要分配的内存..但是当我编译我的代码并运行它时,它会粉碎..任何想法......?提前谢谢!

#include <stdio.h>

struct movies {
int number_chars;
char name;
int made_year;
float money;
};
struct movies m_data;


int main()
{
   scanf("%d",&m_data.number_chars);
   m_data.name=malloc(m_data.number_chars);
   gets(m_data.name);
   printf("%s",m_data.name);
}

3 个答案:

答案 0 :(得分:0)

调用scanf时,您需要传递变量的地址以保存结果(使用&符号&)。这肯定会在那里造成严重的记忆问题。

此外,name的类型为charchar不是指针。因此,您无法将malloc()的结果分配给name

你需要一个指针类型。

此外,&#34;粉碎&#34;不是对出了什么问题的技术描述。如果你能更好地表达自己的情况,你可能会更进一步。

答案 1 :(得分:0)

尝试:

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

struct movies {
int number_chars;
char *name;
int made_year;
float money;
};
struct movies m_data;


int main()
{
   scanf("%d",&m_data.number_chars);
   m_data.name=malloc(m_data.number_chars);
   gets(m_data.name);
   printf("%s",m_data.name);
   free(m_data.name)
}

答案 2 :(得分:0)

那么你应该将scanf传递给malloc - 更具体地说是将存储输入的变量的地址。你没那样做。

没有返回值检查您之前没有使用#include <stdio.h> #include <stdlib.h> struct movies { int number_chars; char* name; int made_year; float money; }; struct movies m_data; int main(void) { if( scanf("%d",&m_data.number_chars)!= 1){ fprintf(stderr, "%s\n", "Error in input"); exit(EXIT_FAILURE); } getchar(); if(m_data.number_chars <= 0){ fprintf(stderr, "%s\n", "Error in number of character count"); exit(EXIT_FAILURE); } m_data.name = malloc(m_data.number_chars+1); if(!m_data.name){ perror("Malloc error"); exit(EXIT_FAILURE); } if(fgets(m_data.name,m_data.number_chars+1,stdin)){ printf("[%s]\n",m_data.name); } return 0; } 的标准功能和事件。

if (myProp === "") {
    $.each(response,
        function(index, item) {
            myDDL.append(new Option(item.TextValue, item.valId).attr('disabled', true));
    });
}