2010-04-18 27 views
1
char 
char* c[30]; 
    c = (char*) malloc(30*sizeof(char)); 

這是如何給不兼容的聲明中內置的功能,預警和和不兼容的類型分配錯誤在我宣佈的malloc行。根據malloc的語法,我不應該有任何錯誤不兼容的聲明中內置的函數malloc和不兼容的類型分配錯誤在C

+0

基本上幾個你的其他的欺騙的問題。 – 2010-04-18 18:11:46

+0

我的警告仍然繼續,即使我留意所有的建議和給出的答案,這就是爲什麼我繼續張貼.. – Hick 2010-04-18 19:11:35

回答

1

您已經聲明c作爲數組。您不能更改數組的值,並且數組不是指針。

c的類型爲(char*)[30](即由30個字符指針組成的數組),而不是char*

如果你想創建30個字符一個動態分配的字符「陣列」,使用

char *c = malloc(30); 

如果你真的想要的30個字符指針數組,例如在它的每個元素的30個字符分配空間,使用

int i; 
for(i = 0; i < sizeof c/sizeof c[0]; i++) { 
    c[i] = malloc(30); 
    if(c[i] == NULL) { 
    //handle error 
    } 
} 
+0

我認爲這個例子不是一個很好的做法,學習。你需要(char *)=從Class中知道引用Class和malloc + sizeof。對不起,你的回答沒有說​​服我 – delive 2016-12-07 00:05:30

+0

@delive C中沒有任何課程,也沒有你不應該在那裏演員 - 這被認爲是不好的做法。並且你不需要char的大小。 – nos 2016-12-07 19:23:19

0

c是一個指針數組。然後你試圖給整個數組分配一個指針。

嘗試

char *c = malloc(30 * sizeof(char)); 

或者,如果你真的需要30個元素,每一個指向30個字符malloc版陣列,你將不得不作出一個循環。

#define CHUNKSIZE 30 
int i; 
char *c[CHUNKSIZE]; 
for (i = 0; i < CHUNKSIZE; i++) 
{ 
    c[i] = malloc(CHUNKSIZE * sizeof(char)); 
} 
+0

仍然警告仍然存在.. – Hick 2010-04-18 18:21:03

0

使用此:

char* c; 
c = (char*)malloc(30*sizeof(char)); 

什麼你宣佈的是30個字符指針數組。這就是爲什麼你在malloc句子中得到不兼容的聲明。

你可以這樣做,但:

c[0] = (char*)malloc(30*sizeof(char)); 
c[1] = (char*)malloc(30*sizeof(char)); 
... 
0

sizeof (char)每個定義始終爲1,所以你不需要寫。

在C malloc返回void *因此類型轉換是不必要的(甚至是有害的,因爲它抑制有用的警告,不要忘了#include <stdlib.h>#include <memory.h>)。

char* c[30]; 

聲明瞭一個30 char *的數組,可能不是你想到的。

如果你想在30 char數組,你應該申報

char c[30]; 

和忘記的malloc。

如果你想要一個char陣列恰好有30長度上的指針,那麼你應該寫:

char *c; 
c = malloc(30); 
1

你必須#include <stdlib.h>