0

我想用一个函数重新分配一个字符串数组。我在这里编写了一个非常简单的程序来演示。我希望输出字母“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;
}

非常感谢!

4

3 回答 3

3

[] 运算符的优先级高于 *,因此像这样更改代码将正常工作。

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

PS "\0" 是不必要的。

于 2012-04-30T09:51:43.157 回答
0

您应该在 gain_memory 中的 *ptr 周围加上括号:

(*ptr)[1] = "b\0";
于 2012-04-30T09:45:26.023 回答
-1

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

#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;
}
于 2012-04-30T09:50:41.613 回答