C中的char指针初始化

lju*_*tin 3 c string pointers char

关于字符指针以及它们是如何工作的我不太清楚.

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

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

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

有人可以向我解释一下吗?

pb2*_*b2q 16

您没有分配任何内存可供使用ab.

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

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

ab = malloc(sizeof(char) * (NUM_CHARS + 1));
Run Code Online (Sandbox Code Playgroud)

sprintf只要你用足够的空间,你的意志就会奏效malloc.注意:+ 1用于null终止符.

或者,您可以ab通过将其声明为数组来创建一些内存:

char ab[NUM_CHARS + 1];
Run Code Online (Sandbox Code Playgroud)

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