【发布时间】:2013-11-04 16:46:12
【问题描述】:
谁能告诉我我在这里做错了什么?为什么我的程序会出现段错误?
我正在尝试在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
【问题讨论】:
-
只是作为一个提示:数据应该写在哪里?你认为指针指向哪里?
-
@glglgl - 我认为 string3 没有指向任何东西,但是当我执行 printf ("%p",string3) 时,它似乎确实指向了一个内存位置。
-
但是对于一个未指定的人......
-
@user2953313:你在说什么内存地址?
string3没有指向任何有意义的内存地址。它的值是不确定的,技术上根本不是内存地址。它可能“似乎”指向“内存位置”,但实际上这只是一种错觉——未定义行为的结果。