C++和C语言的一个小区别,请解释一下原因

来源:百度知道 编辑:UC知道 时间:2024/09/22 11:42:59
请看下面的程序,用TC编译没问题,但是用VC++就不行,原因何在?
#include<stdio.h>
void main()
{
char *a="hello";
int i;
for(i=0;i<5;i++)
printf("%c",a[i]);
a[2]='b';
printf("%c",a[2]);

}

原因很简单。在微软的编译器里统统把
char *a="hello";
这种写法的认为是这样的:即指针a所指向的内容"hello"是只读的。
所以当时给其赋值时就会发生内存访问冲突。操作系统会禁止这一操作,导致程序发生错误。

同意 HideSun 的看法。
将 char *a="hello";
改成 char a[]="hello";
就不会出现错误了。
如果用 char *a="hello";
程序运行到 a[2]='b'; 这儿就会出现错误

不太清楚具体原因,不过我更倾向于楼上的观点.....
你可以调试一下就知道了...把只读的那行代码去掉编译一下就知道了...

char *a="hello";
c++不会自动为a分配空间
可以这样初始化
char a[]="hello";

因为C++的输出语句不是printf

C++里没有printf的