gpt4 book ai didi

c - 何时对字符指针使用 malloc

转载 作者:太空狗 更新时间:2023-10-29 16:21:43 27 4
gpt4 key购买 nike

我特别关注何时对字符指针使用 malloc

char *ptr;
ptr = "something";
...code...
...code...
ptr = "something else";

malloc 是否适合像这样微不足道的事情?如果是,为什么?如果不是,那么什么时候需要字符指针?

最佳答案

正如其他人所指出的,您不需要使用 malloc 来做:

const char *foo = "bar";

原因正是*foo 一个指针——当你初始化foo时你并没有创建字符串,只是一个指针,指向 "bar" 在可执行文件的数据部分中的位置。您可以随心所欲地复制该指针,但请记住,它们始终指向该字符串的同一个实例。

那么什么时候应该使用malloc呢?通常你使用 strdup() 来复制一个字符串,它在后台处理 malloc。例如

const char *foo = "bar";
char *bar = strdup(foo); /* now contains a new copy of "bar" */
printf("%s\n", bar); /* prints "bar" */
free(bar); /* frees memory created by strdup */

现在,我们终于解决了一个问题,如果您正在使用 sprintf() 或者更安全的 snprintf() ,您可能想要 malloc,它创建/格式化一个新的字符串。

char *foo = malloc(sizeof(char) * 1024);        /* buffer for 1024 chars */
snprintf(foo, 1024, "%s - %s\n", "foo", "bar"); /* puts "foo - bar\n" in foo */
printf(foo); /* prints "foo - bar" */
free(foo); /* frees mem from malloc */

关于c - 何时对字符指针使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1788655/

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