簡體   English   中英

為結構內的char數組創建指針大小的內存

[英]creating memory of the size of a pointer for char array inside struct

我有一個程序要求使用argv輸入兩個參數,然后我想使用argv[1]argv[2]的長度為我的struct等於char argv[1]的大小的char兩個指針動態分配內存argv[1]argv[2]

這是我的代碼,但是我不確定是否正確執行了,任何人都可以驗證嗎? 函數內部的參數passedargv1passedargv2是從main()函數傳遞的argv[1]argv[2] 基本上,我想將chararray1=argv[1]chararray2=argv[2]當作只是普通char數組,但是我不提前知道輸入的大小,因此無法預先初始化chararray2chararray2 另外,我無法更改argv內部的內容,因此我不能讓chararray1chararray2指向它們,因為稍后需要更改它們。

struct StructInformation{

    char *chararray1;
    char *chararray2;
};



typedef struct StructInformation SimplifiedStruct;

SimplifiedStruct *CreateMem(char *passedargv1, char *passedargv2) {

SimplifiedStruct *ptr=(SimplifiedStruct*)malloc(sizeof(SimplifiedStruct));
ptr->chararray1=(char*)malloc(sizeof(passedargv1));
ptr->chararray2=(char*)malloc(sizeof(passedargv2));
  1. 不要轉換malloc()的返回值

  2. malloc(char*)malloc顯然是錯誤的。

  3. 對於您的主要問題, sizeof(passedargv1)sizeof(passedargv2)都只是求值為sizeof(char *) ,所以不,您沒有正確執行它。 您需要在兩個參數上調用strlen() ,並將每個參數加1 ,這將告訴您需要分配多少內存,假設您只想復制到字符串中。

例如:

ptr->chararray1 = malloc(strlen(passedargv1) + 1);
ptr->chararray2 = malloc(strlen(passedargv2) + 1);

然后大概:

strcpy(ptr->chararray1, passedargv1);
strcpy(ptr->chararray2, passedargv2);

不要忘記檢查malloc()的返回值,以確保您擁有內存。

strlen替換sizeof ,並記住包括string.h 因為指針的大小總是等於4,而且也沒有必要使用cast調用malloc時。

ptr->chararray1 = malloc(strlen(passedargv1) + 1);
ptr->chararray2 = malloc(strlen(passedargv2) + 1);

編輯:
malloc的原型:
void* malloc (size_t size); 它返回void*的指針,可以將其強制轉換為所需類型的數據指針,以便將其取消引用。 由於您已經將chararray1chararray2定義為char* ,因此可以省略強制類型轉換。

暫無
暫無

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

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