我试图(1(初始化一个char数组,(2(每次读取字符串时都调整数组的大小。然而,每当我尝试编译时,我都会看到消息说error: initializer element is not constant. char *ptr = malloc(1 * sizeof(*ptr));
我不明白我的代码出了什么问题。我尝试了(1(char *ptr = (char*) malloc(ptr * sizeof(char))
和(2(char *ptr = malloc(1 * sizeof(*ptr))
,但都不起作用。
这是我的完整代码:
// char *ptr = (char*) malloc(ptr * sizeof(char));
char *ptr = malloc(1 * sizeof(*ptr));
void execute(char *splitInput)
{
char myhistory[] = "myhistory";
int string_length = strlen(splitInput);
char *new_ptr = realloc(ptr, sizeof(char) * string_length);
}
问题出在声明char *ptr = malloc(1 * sizeof(*ptr));
上。C不允许那里的代码,只允许静态声明。即:
char *ptr = "Foo bar baz.";
很好,因为它正在分配一个静态字符串。没有可执行的代码。
以下将起作用:
char *ptr;
int main(int argc, char *argv[]) {
// char *ptr = (char*) malloc(ptr * sizeof(char));
ptr = malloc(1 * sizeof(*ptr));
}
void execute(char *splitInput)
{
char myhistory[] = "myhistory";
int string_length = strlen(splitInput);
char *new_ptr = realloc(ptr, sizeof(char) * string_length);
}
char *ptr = (char*) malloc(ptr * sizeof(char));
char *ptr = malloc(1 * sizeof(*ptr));
在C中,不允许在任何其他函数之外执行代码,例如malloc()
等函数中的代码。因此,无论你如何重新排列其中的部分,这些语句都不会起作用
您需要在全局范围内声明指针,并在任何函数内对malloc()
返回的指针进行赋值:
#include <stdlib.h>
#include <string.h>
char *ptr; // declare ptr as pointer with global scope.
void execute(char *splitInput)
{
//char myhistory[] = "myhistory";
int string_length = strlen(splitInput);
char *new_ptr = realloc(ptr, sizeof(char) * string_length);
strcpy(ptr,splitInput);
}
int main()
{
char s[] = "Hello World!";
ptr = malloc(1 * sizeof(*ptr)); // assign ptr to point to the memory
// allocated by malloc.
execute(s);
}
注意,myhistory
在函数execute()
内部没有使用。