c - 首先将字符串指针分配给分配的内存和直接分配给字符串文字有什么区别?

标签 c

所以我的理解是这两段代码是有效的并且做同样的事情。

1.)

char *ptr = malloc(5);
ptr = "hi";

2.)

char *ptr = "hi";

我想知道两者之间的区别,比如是否有任何优势。

最佳答案

前者是一个错误,永远不应该编写该代码。

它用字符串文字的地址覆盖 malloc() 返回的指针,丢弃原始指针并泄漏内存。

您必须使用 strcpy() 或其他一些内存复制方法来使用字符串初始化新分配的堆内存。

第二个只是将字符串文字的(运行时常量)地址分配给指针 ptr,没有任何字符被复制到任何地方。

关于c - 首先将字符串指针分配给分配的内存和直接分配给字符串文字有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25607053/

相关文章:

c - 使用 doxygen 的 ISR 文档

c - 当另一个程序访问 SQLite 数据库时如何解锁它?

程序输出可以通过程序本身重定向到管道吗?

c - 如何访问另一个结构体中的结构体字段指针并正确写入?

C 在 fscanf 中使用 char* 导致错误段错误 : 11

C错误: expression must have arithmetic or pointer type

c - 如何同时运行3个依赖应用程序

c - 对链表进行基数排序

c - 使用 realloc 填充内存

c - 循环中的第二个 Scanf 未被读取。跳转到 else 条件