C:重新分配一个字符串数组

时间:2012-04-30 09:35:19

标签: c arrays string realloc

我想用函数重新分配一个字符串数组。我写了一个非常简单的程序来演示这里。我希望输出字母“b”,但我得到NULL。

void gain_memory(char ***ptr) {
    *ptr = (char **) realloc(*ptr, sizeof(char*) * 2);
    *ptr[1] = "b\0";
}

int main()
{
    char **ptr = malloc(sizeof(char*));
    gain_memory(&ptr);
    printf("%s", ptr[1]); // get NULL instead of "b"
    return 0;
}

非常感谢!

3 个答案:

答案 0 :(得分:3)

[]运算符的优先级高于*,因此更改代码就可以了。

(*ptr)[1] = "b";

P.S。 “\ 0”是不必要的。

答案 1 :(得分:0)

你应该把括号放在* ptr中的gain_memory:

(*ptr)[1] = "b\0";

答案 2 :(得分:0)

您没有为字符串数组中的实际字符串分配任何内存,您需要执行以下操作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void gain_memory(char ***ptr, int elem) {
    *ptr = (char**)realloc(*ptr, 2*elem*sizeof(char*));
    (*ptr)[1] = "b";
}

int main()
{
    //How many strings in your array?
    //Lets say we want 10 strings
    int elem = 10;
    char **ptr = malloc(sizeof(char*) * elem);
    //Now we allocate memory for each string
    for(int i = 0; i < elem; i++)
        //Lets say we allocate 255 characters for each string
        //plus one for the final '\0'
        ptr[i] = malloc(sizeof(char) * 256);

    //Now we grow the array
    gain_memory(&ptr, elem);
    printf("%s", ptr[1]);
    return 0;
}