char
char* c[30];
c = (char*) malloc(30*sizeof(char));
這是如何給不兼容的聲明中內置的功能,預警和和不兼容的類型分配錯誤在我宣佈的malloc行。根據malloc的語法,我不應該有任何錯誤不兼容的聲明中內置的函數malloc和不兼容的類型分配錯誤在C
char
char* c[30];
c = (char*) malloc(30*sizeof(char));
這是如何給不兼容的聲明中內置的功能,預警和和不兼容的類型分配錯誤在我宣佈的malloc行。根據malloc的語法,我不應該有任何錯誤不兼容的聲明中內置的函數malloc和不兼容的類型分配錯誤在C
您已經聲明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
}
}
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));
}
仍然警告仍然存在.. – Hick 2010-04-18 18:21:03
使用此:
char* c;
c = (char*)malloc(30*sizeof(char));
什麼你宣佈的是30個字符指針數組。這就是爲什麼你在malloc
句子中得到不兼容的聲明。
你可以這樣做,但:
c[0] = (char*)malloc(30*sizeof(char));
c[1] = (char*)malloc(30*sizeof(char));
...
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);
你必須#include <stdlib.h>
基本上幾個你的其他的欺騙的問題。 – 2010-04-18 18:11:46
我的警告仍然繼續,即使我留意所有的建議和給出的答案,這就是爲什麼我繼續張貼.. – Hick 2010-04-18 19:11:35