簡體   English   中英

Malloc和Struct

[英]Malloc and Struct

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

調用scanf ,您需要傳遞變量的地址以保存結果(使用& )。 這肯定會導致嚴重的內存問題。

另外, name的類型為char char不是指針。 因此,您不能將malloc()的結果分配給name

您需要一個指針類型。

同樣,“暗戀”也不是技術問題的技術描述。 如果您可以更好地闡明自己的情況,那么您可能會走得更遠。

嘗試:

#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)
}

好吧,您應該將char*傳遞給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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM