如何使用malloc和C来分配字符串



我试图(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()内部没有使用。

相关内容

  • 没有找到相关文章

最新更新