下例程序在vc中出错,提示"当前内存不可写!",而在tc3.0 可执行:main()
{
char *str="我是abc";
str[3]='\0'; printf("%s\n",str);
}还有一个问题:
在TC中是不可以输出汉字的,因为使用ascii码,而在vc6.0中是可以的,在用printf("%s\n",str)输出str时,系统如何知道,“我”字是16位双字节,而a为8位一个字节,在输出字符之
前系统不是已先确定了字符是由1个字节存储或由2个字节存储吗?谢谢!
{
char *str="我是abc";
str[3]='\0'; printf("%s\n",str);
}还有一个问题:
在TC中是不可以输出汉字的,因为使用ascii码,而在vc6.0中是可以的,在用printf("%s\n",str)输出str时,系统如何知道,“我”字是16位双字节,而a为8位一个字节,在输出字符之
前系统不是已先确定了字符是由1个字节存储或由2个字节存储吗?谢谢!
str是常量!
VC默认是MBCS字符编码,一个字符既可由一个字节组成,也可由两个字节组成。
char *str="我是abc";
str="123";
这样可以,
str[2] = '\0'就不行
这个和编译器有关吧。
str[3]='\0';
这出错是因为char *str="我是abc"; str成了常量指针,str值不能修改,所以出错而 lfchen(一条晚起的虫)说
char *str="我是abc";
str="123";
是可以通过的,因为str是一个指针,str="123"后,str重新指到一"123"的地址了系统在输出之前,如何判别将输出的字符是双字节字符还是ascii码字符?
答:你看看WideCharToMultiByte和MultiByteToWideChar这两个API吧,这是转化的函数