[英]Working with “multidimensional” “dynamic arrays” in C
我一直在嘗試執行以下代碼。 盡管任務很瑣碎,但我遇到了細分錯誤。
下面的代碼段的目的是創建一個最大行大小為4,列大小為33的多維數組。然后,在創建之后,應將所有行的內容設置為0,后跟一個'\\0'
字符。 然后最后,它應該在stdout
上顯示輸出。
盡管我對編程並不陌生,但我仍然會遇到類似的錯誤,因此請盡可能向我解釋一下如何避免此類錯誤。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
int i,j,k,x,y;
char** arr;
arr = (char**) malloc(4 * sizeof(char*));
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(9 * sizeof(char));
memset(arr,0,8);
arr[i][8] = '\0';
}
for ( j = 0; j<4; j++) {
puts(arr[j]);
}
return 0;
}
你memset
荷蘭國際集團的錯誤的指針。
代替:
memset(arr,0,8);
你要:
memset(arr[i],0,8);
因此,您處於一種間接的狀態。
正如評論中指出的,這里有一些優化:
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(9 * sizeof(char));
memset(arr[i],0,9);
}
要么
for ( i = 0; i < 4; i++) {
arr[i] = (char*) calloc(9, sizeof(char));
}
請注意,在C中不需要強制轉換為char*
。
如果要使用字符'0'
而不是空字符,則應使用以下代碼:
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(8 * sizeof(char));
memset(arr[i],'0',8);
arr[i][8] = '\0';
}
memset(arr,0,8);
是問題,您正在清除指針數組
嘗試:
memset(arr[i], '0', 8);
假設您想用零填充字符串
在for循環中,我認為您有一個邏輯錯誤:
memset(arr[i],0,8);
您也不需要設置以下內容:
arr[i][8] = '\0';
相反,您可以這樣做:
memset(arr[i],0,9);
'\\ 0'字符與0沒什么不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.