我怎么能将char *变量赋给一个字符串,而不必先前分配内存?
例如,如果我有一个函数返回一个char *(例如文件路径),我会以这种方式调用该函数。
char* path;
path = get_path();
如果我不知道路径的长度是什么,我怎么能指望char *的行为呢?在将路径分配给“Path”之前是否必须分配路径的大小?
答案 0 :(得分:1)
在您的代码中:
char* path;
path = get_path();
get_path
返回指向字符串(或等效地)字符串的指针。 (指向字符串的指针是指向其第一个字符的指针)。赋值只是复制指针值,将其存储在path
。
get_path
函数本身必须分配空间以某种方式保存字符串。
有几种方法可以做到这一点。有些人认为呼叫者有责任在不再需要时释放空间。
推荐阅读:comp.lang.c FAQ,尤其是第4节(指针),6(数组和指针),7(内存分配)和8(字符和字符串)。
答案 1 :(得分:0)
在这种情况下,get_path()
函数返回一个指向它自己的内存缓冲区的指针。现在的问题是,谁分配了那个记忆,谁负责释放它?
答案 2 :(得分:0)
char *path;//path is just a pointer
如果为get_path()中的路径字符串分配内存,则只需将指针(char * path)指向该内存即可。
答案 3 :(得分:-1)
在get_path
中,您必须将指针返回到已分配的变量。像这样:
char *get_path()
{
char *var = (char*)malloc(sizeof(char)*n);
setdirectory(var);
return var;
}
其中n
是目录的大小。
但是既然你说你不知道目录的大小你可以得到它的名字,计算单词,分配另一个内存量(那个时间确切的数量)并释放另一个。这将有助于你使用内存。