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