簡體   English   中英

如何在結構體中為c中的字符串創建內存分配?

[英]How to create memory allocation in a struct for a string in c?

我有一個問題。 我將解釋,我正在嘗試為結構內的字符串創建動態內存分配並打印它。 問題是,它並不關心我動態分配的大小。

例如,我創建了一個大小為6的字符串,但讓我們插入15個字符並將其全部打印出來。

因此,基本上,它不限制我的字符串大小,為什么呢?

typedef struct{
    int grade;
    int id;
    int arr[5];
    char *str;
}student;

int main(){
    puts("How many many letters in char?\n");
    scanf("%d", &num);
    getchar();
    student1.str = (char *)malloc(sizeof(char)*num+1);
    gets(buffer);
    strcopy(student1.str, buffer);
}

順便說一句,我試圖讓你們/女士盡可能清楚地編寫代碼,以及我需要的主要內容。 我知道我沒有釋放內存,也沒有檢查分配是否失敗等。

首先要說的是, 請參閱有關為什么不在Cmalloc()和family的返回值的討論。

來到這里的主要問題, 超出范圍的內存訪問會導致未定義的行為

因此,基本上,它不限制我的字符串大小,為什么呢?

C標准本身沒有什么可以阻止您訪問超出范圍的內存( 即訪問未分配給您的進程的內存 ),但是任何嘗試都會導致UB。 不要那樣做

那就是

  1. 永遠不要使用gets() ,它會遇到緩沖區溢出問題,請改用fgets()

  2. sizeof(char)在C中定義為1。將其用作乘法器是多余的。

malloc授予您寫入內存的權限,但是您可以嘗試在沒有權限的情況下進行寫入。 那就是你剛才所做的。 它可能會工作,但可能不會,但是如果正確使用malloc,則應該可以運行此代碼,且運行時無錯誤

當您使用C時,編程工作的主要部分是確保擊中您分配的內存的所有數據都將真正適合。 這就是為什么C編程如此痛苦。 它還要求您在不再使用內存時釋放您的內存,這在您的示例中已被忘記。

暫無
暫無

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

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