我创建了一个大的2d字符数组,并希望为其分配字符串。
int i;
char **word;
int start_size = 35000;
word=(char **) malloc(start_size*sizeof(char *));
for(i=0;i<start_size;i++)
word[i]=(char *) malloc(start_size*sizeof(char));
word[2][2] = "word";
如何分配字符串? 解释为什么这段代码不起作用...... 我是低级编程和C的新手,但在高级编程方面经验丰富
答案 0 :(得分:0)
您不能在C中进行字符串赋值。
你需要调用一个函数,sepcifically strcpy()
(<string.h>
中的原型)
#include <string.h>
strcpy(word[2], "word");
答案 1 :(得分:0)
您必须决定是否需要字符串列表或2D字符串数组。
字符串列表如下:
char **word;
word = (char**)malloc(start_size*sizeof(char*));
word[2] = "word";
在此示例中,word[2]
将是列表中的第三个字符串,word[2][1]
将是第三个字符串中的第二个字符。
如果你想要一个2D数组的字符串,你必须这样做:
int i;
char ***word;
^^^ 3 stars
int start_size = 35000;
word = (char***)malloc(start_size*sizeof(char**));
^^^ 3 stars ^^^ 2 stars
for(i=0;i<start_size;i++)
word[i] = (char**) malloc(start_size*sizeof(char*));
^^^ 2 stars ^^^ 1 star
word[2][2] = "word"; // no it works!
请注意,在C中,您不需要malloc
之前的演员表。所以这也有效:
word = malloc(start_size*sizeof(char**));
答案 2 :(得分:0)
word[2][2] = "word";
在上面的语句中,字符串文字"word"
被隐式转换为指向其第一个元素的指针,该元素的类型为char *
,而word[2][2]
的类型为char
。这会尝试分配指向字符的指针。这解释了您所说的警告信息 -
assignment makes integer from pointer without a cast
您只能使用字符串文字来初始化字符数组。您需要做的是使用标准函数strcpy
来复制字符串文字。此外,您不应该投射malloc
的结果。请阅读本文 - Do I cast the result of malloc?我建议进行以下更改 -
int i;
int start_size = 35000;
// do not cast the result of malloc
char **word = malloc(start_size * sizeof *word);
// check word for NULL in case malloc fails
// to allocate memory
for(i = 0; i < start_size; i++) {
// do not cast the result of malloc. Also, the
// the sizeof(char) is always 1, so you don't need
// to specify it, just the number of characters
word[i] = malloc(start_size);
// check word[i] for NULL in case malloc
// malloc fails to allocate memory
}
// copy the string literal "word" to the
// buffer pointed to by word[2]
strcpy(word[2], "word");