0

我如何可以为 char* 变量分配一个字符串,而不必事先分配内存?

例如,如果我有一个函数返回一个 char*(例如文件路径),我会以这种方式调用该函数。

char* path;
path = get_path();

如果我不知道路径的长度是多少,我怎么能期望 char* 的行为?在分配给“路径”之前,是否有必要分配路径的大小?

4

4 回答 4

1

在您的代码中:

char* path;
path = get_path();

get_path返回指向(或等效地,地址)字符串的指针。(指向字符串的指针是指向其第一个字符的指针)。赋值只是复制该指针值,将其存储在path.

get_path函数本身必须分配空间以某种方式保存字符串。

有几种方法可以做到这一点。有些人让调用者有责任在不再需要时释放空间。

推荐阅读:comp.lang.c FAQ,尤其是第 4 节(指针)、第 6 节(数组和指针)、第 7 节(内存分配)和第 8 节(字符和字符串)。

于 2012-07-12T03:33:08.260 回答
0

在这种情况下,get_path()函数返回一个指向它自己的内存缓冲区的指针。现在的问题是,谁分配了该内存,谁负责释放它?

于 2012-07-12T03:31:56.860 回答
0
char *path;//path is just a pointer

如果你在 get_path() 中为路径字符串分配内存,你只需让指针(char *path) 指向那个内存。

于 2012-07-12T03:32:39.133 回答
-1

get_path您必须将指针返回到已分配的变量。像这样:

char *get_path()
{
    char *var = (char*)malloc(sizeof(char)*n);
    setdirectory(var);
    return var;
}

n目录的大小在哪里。

但是既然你说你不知道目录的大小,你可以得到它的名字,计算单词,分配另一个内存量(那个时候确切的数量)并释放另一个内存。这将帮助您使用内存。

于 2012-07-12T03:32:34.627 回答