关于C字符串指针的困惑
1 #include <stdio.h>
2 #include <stdlib.h>
3 void main()
4 {
5 char *sp1="Hello!",*sp2;
6 printf("sp1=%s\n",sp1);
7 printf("sp2="); scanf("%s",&sp2);
8 printf("\n\n");
9 printf("sp2=%s\n",&sp2);
10
11 system("PAUSE");
12 }
sp2已经是字符串指针了,为什么第7和第9行还要取指针的地址?(否则运行时报错,但编译可以通过)。
如果按上述代码(不含行号)运行,在输入sp2并正确现显示p2指向的字符串,出现“请按任意键继续……”时按任意键后却报错,说一个内存地址访问另一个内存地址时发生访问冲突,这到底是为什么?
请自己运行一下再回答我,谢谢。
参考答案://#define _RUNTIME_FATAL_
#include <stdio.h>
#include <stdlib.h>
#ifdef _RUNTIME_FATAL_
#include <string.h>
#endif
int main(int argc, char** argv)
{
char *sp1 = "Hello!", *sp2;
printf("sp1 = %s\n",sp1);
sp2 = (char*)malloc(100);
#ifdef _RUNTIME_FATAL_
memset(&sp2, 0x0, sizeof(sp2));
#endif
scanf("%s",sp2);
printf("sp2 = %s\n",sp2);
return 0x0;
}
对啦我重装机器没有2005 你把宏打开 运行应该就挂掉了。。