下例程序在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个字节存储吗?谢谢!
  

解决方案 »

  1.   

    char *str="我是abc"; 
    str是常量!
      

  2.   

    相当于const char*,字符串内容不能修改。
    VC默认是MBCS字符编码,一个字符既可由一个字节组成,也可由两个字节组成。
      

  3.   

    VC下是多字节字符集(multi-byte character set or MBCS)。
      

  4.   

    系统在输出之前,如何判别将输出的字符是双字节字符还是ascii码字符?
      

  5.   

    刚才用了CB6试了,通过了测试。运行结果:我str表示指针的首地址是个常量,但str[x]应该是个变量。
      

  6.   

    VC里面
    char *str="我是abc"; 
    str="123";
    这样可以,
    str[2] = '\0'就不行
    这个和编译器有关吧。 
      

  7.   

    char *str="我是abc"; 
    str[3]='\0';   
    这出错是因为char *str="我是abc"; str成了常量指针,str值不能修改,所以出错而 lfchen(一条晚起的虫)说
    char *str="我是abc"; 
    str="123";
    是可以通过的,因为str是一个指针,str="123"后,str重新指到一"123"的地址了系统在输出之前,如何判别将输出的字符是双字节字符还是ascii码字符?
    答:你看看WideCharToMultiByte和MultiByteToWideChar这两个API吧,这是转化的函数