簡體   English   中英

2D數組,在C中使用calloc

[英]2d array, using calloc in C

我正在嘗試創建2D字符數組到字符存儲行。 例如:

lines[0]="Hello";
lines[1]="Your Back";
lines[2]="Bye";

由於行必須動態,所以我一開始不知道需要多少行。 這是我的代碼:

int i;
char **lines= (char**) calloc(size, sizeof(char*));

for ( i = 0; i < size; i++ ){
lines[i] = (char*) calloc(200, sizeof(char));
}

for ( i = 0; i < size; i++ ){
free(lines[i]);
}

free(lines);

我知道每行不能超過200個字符。 我不斷收到諸如“錯誤C2059:語法錯誤:'for'”之類的錯誤。 關於我做錯了什么的任何想法?

沒有代碼不在函數中。

您不能只是將任意語句放在C和C ++中的函數之外。 不過,您可以使用函數來初始化變量:

char** init_lines() {
    char** ln = /* ... */;
    // your allocations etc. here
    return ln;
}

char** lines = init_lines();

您用C ++標記了問題-為什么不為此使用std::vector<std::vector<char> >

查看編譯器錯誤,似乎您在其中一個for循環之前缺少分號-您在此處發布的代碼似乎運行得很好。

首先,執行第一個calloc浪費時間,因為您立即使用第一個for循環對其進行了初始化。

話雖如此,您顯示的代碼完全沒有錯。

因此,您的錯誤可能出在其他地方,或者那不是您發布的代碼。 我建議您發布確切的錯誤消息,以及經過剪切粘貼的違規行的副本,並在上下文的兩側各行十行。 這將使我們的生活變得輕松多了。


錯誤:

syntax error : 'for' syntax error : missing ')' before ';'
syntax error : missing ';' before '<' missing type specifier - int assumed

如您的評論之一所示,通常是由不平衡的括號引起的。 檢查所有()字符,以確保它們在數量和位置上均相等。 可能是因為您在for之前的語句中缺少) ,但這只是有根據的猜測,因為您發布的代碼沒有這個問題。

在這里,我認為是不同的。 可能有用。 char指針或char double在編譯期間隱式定義。 因此,它不需要顯式定義,並且這樣做可以顯示語法錯誤。 如果不希望用NULL初始化垃圾值,請嘗試使用char指針而不用calloc初始化。 就像使用calloc一樣,您發現沒有什么不同。

暫無
暫無

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

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