[英]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]
。
這是我的代碼,但是我不確定是否正確執行了,任何人都可以驗證嗎? 函數內部的參數passedargv1
和passedargv2
是從main()
函數傳遞的argv[1]
和argv[2]
。 基本上,我想將chararray1=argv[1]
和chararray2=argv[2]
當作只是普通char
數組,但是我不提前知道輸入的大小,因此無法預先初始化chararray2
和chararray2
。 另外,我無法更改argv
內部的內容,因此我不能讓chararray1
和chararray2
指向它們,因為稍后需要更改它們。
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));
不要轉換malloc()
的返回值
malloc(char*)malloc
顯然是錯誤的。
對於您的主要問題, 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*
的指針,可以將其強制轉換為所需類型的數據指針,以便將其取消引用。 由於您已經將chararray1
和chararray2
定義為char*
,因此可以省略強制類型轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.