有人可以告诉我我在这里做错了什么吗?为什么我的程序会 segfault?
我正在尝试在string1
和string2
之间插入第三个字符串。
#include <stdio.h>
int main (void)
{
char *string1 = "HELLO";
char *string2 = "WORLD";
char *stringX = "++++";
char *string3;
printf ("%s,%s\n",string1,string2);
sprintf(string3,"%s%s%s",string1,stringX,string2);
printf ("NewVar: %s",string3);
}
为什么sprintf
不能将结果存储在指向string3
的内存地址中?当我将string3
声明为普通数组时,它可以工作,但是当它是指向char
数组的指针时就不行了。
我以为string3
没有指向任何内存位置,但是当我执行printf("%p",string3);
时,它确实指向某个位置。
输出:
# ./concat
HELLO,WORLD,0x40042
string3
并没有指向任何有意义的内存地址。它的值是不确定的,从技术上讲根本不是内存地址。它可能“看起来”指向了一个“内存位置”,但实际上这只是一种幻觉 - 未定义行为的结果。 - AnT stands with Russia