ANSI C中的字符串处理(内存分配)

时间:2012-07-12 03:28:07

标签: c string pointers memory-management

我怎么能将char *变量赋给一个字符串,而不必先前分配内存?

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

char* path;
path = get_path();

如果我不知道路径的长度是什么,我怎么能指望char *的行为呢?在将路径分配给“Path”之前是否必须分配路径的大小?

4 个答案:

答案 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是目录的大小。

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