gpt4 book ai didi

C中的char指针初始化

转载 作者:太空狗 更新时间:2023-10-29 15:43:37 28 4
gpt4 key购买 nike

我不太清楚字符指针及其工作原理。

程序构建,但在我运行时崩溃。

 char *ab = NULL;
//ab = "abc123"; // works fine
sprintf(ab, "abc%d", 123); // this line seems to crash the program

当 sprintf 将 (char * str) 作为第一个参数时,我不明白这是怎么回事。

有人能给我解释一下吗?

最佳答案

您没有分配任何内存用于 ab

第一个赋值是可行的,因为您正在为 ab 赋值一个字符串常量:"abc123"。常量字符串的内存由编译器代表您提供:您不需要分配此内存。

在你可以使用 ab 之前sprintf,您需要使用malloc 分配一些内存,并将该空间分配给ab:

ab = malloc(sizeof(char) * (NUM_CHARS + 1));

然后,只要您使用 malloc 获得足够的空间,您的 sprintf 就会工作。注意:+ 1 用于 null terminator .

或者,您可以通过将 ab 声明为数组来为它腾出一些内存:

char ab[NUM_CHARS + 1];

如果不以某种方式为ab 分配内存,sprintf 调用将尝试写入NULL,这是未定义的行为;这就是你崩溃的原因。

关于C中的char指针初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055439/

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