C多维char数组 - 赋值在没有强制转换的情况下从指针生成整数

时间:2014-04-17 10:42:15

标签: c arrays string memory-management char

我创建了一个大的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的新手,但在高级编程方面经验丰富

3 个答案:

答案 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");