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"
.编译器代表您提供常量字符串的内存:您不需要分配此内存.
在使用ab
eg 之前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
,这是未定义的行为; 这是你崩溃的原因.