簡體   English   中英

在C語言中使用“多維”“動態數組”

[英]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.

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