gpt4 book ai didi

c++ - 使用 malloc() 为 const char 字符串动态分配内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:27 27 4
gpt4 key购买 nike

我正在编写一个程序,它从 .ini 文件中读取一个值,然后将该值传递给一个接受 PCSTR(即 const char *)的函数。函数是getaddrinfo()

所以,我想写PCSTR ReadFromIni()。要返回常量字符串,我计划使用 malloc() 分配内存并将内存转换为常量字符串。我将能够获得从 .ini 文件中读取的确切字符数。

这种技术可以吗?我真的不知道还能做什么。

以下示例在 Visual Studio 2013 中运行良好,并根据需要打印出“hello”。

const char * m()
{
char * c = (char *)malloc(6 * sizeof(char));
c = "hello";
return (const char *)c;
}

int main(int argc, char * argv[])
{
const char * d = m();
std::cout << d; // use PCSTR
}

最佳答案

第二行“严重”错误:

char* c = (char*)malloc(6*sizeof(char));
// 'c' is set to point to a piece of allocated memory (typically located in the heap)
c = "hello";
// 'c' is set to point to a constant string (typically located in the code-section or in the data-section)

您正在为变量 c 赋值两次,所以很明显,第一次赋值没有意义。这就像写作:

int i = 5;
i = 6;

最重要的是,您“丢失”了已分配内存的地址,因此以后将无法释放它。

您可以按如下方式更改此功能:

char* m()
{
const char* s = "hello";
char* c = (char*)malloc(strlen(s)+1);
strcpy(c,s);
return c;
}

请记住,无论谁调用 char* p = m(),都必须在稍后的某个时间点调用 free(p)...

关于c++ - 使用 malloc() 为 const char 字符串动态分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21579819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com