我想在C程序中編寫更高效的代碼,並且我需要一些幫助才能使指針和賦值正確。我展示下面兩種方法中,每個使用下面的聲明和函數strncpy:C程序:定期與不規則字符串數組
int kk, arraysize;
char person_name[100] = "";
char * array_person_name, * array_param;
...
strncpy(person_name, "John Smith", 100);
arraysize = <this value is downloaded from database>;
...
方法A(矩形陣列):
array_person_name = malloc(sizeof(char) * arraysize *100);
array_param = malloc(sizeof(char) * arraysize * 2);
for (kk = 0; kk < arraysize; kk++) {
strncpy(array_person_name[kk], person_name, 100);
strncpy(array_param[kk], "bt", 2);
}
方法B(粗糙的陣列):
for (kk = 0; kk < arraysize; kk++) {
array_person_name[kk] = &person_name;
array_param[kk] = "bt";
}
請注意,我試圖創建的數組將相同的值放入數組的每個元素中。方法A是arraysize
元素的一個(矩形)數組,每個元素本身是一個由100個字符組成的數組。方法B通過創建一個arraysize
元素(不齊整的)數組來嘗試不浪費存儲空間,其中每個元素都是一個指向字符的指針。
問題1:我在方法A中正確分配內存(例如malloc)嗎?
問題2:方法B的語法看起來是否正確?
問題3:如何爲方法B中的數組分配內存?
問題4:我確定方法B通常是首選嗎?
注意:您對'strncpy()'的使用是錯誤的(但是文字示例沒問題)。爲了安全地使用'strncpy()',你應該複製1小於目標數組的大小,並用'\ 0'填充最後一個元素。否則就會冒着產生不是字符串的字符數組的風險。 – pmg 2012-04-06 21:07:25
您的方法A代碼沒有正確使用您的存儲,因爲您的變量類型錯誤,它們需要例如'char(* array_person_name)[100];'和'char(* array_param)[2];'。 – Neil 2012-04-06 22:51:17