C++字符数组解决方案

C++字符数组
char *p = "asdfasdf";
    for(int i = 0; i != '\0'; i++)
    {
        cout<<p[i]<<endl;
    }

这样不行?那为什么p[1]、p[2]......都可以输出?


若是
char *p = "阿萨德法师的";

p[1].....都输出不了?

这是怎么回事
c++ 字符数组

------解决方案--------------------
可以输出不代表这种做法是正确的,就像你在学校闭着眼睛走路撞上了美女不代表你就可以在任何情况下都闭着眼睛走路

char*p="abc";这种写法指向只读内存可读不可写,而且这不叫数组;
你检验的是i是否为0而不是p[i]将导致循环会在不确定的次数后终止;
用char类型解读中文字符串(一般默认是ASCII码存储)会导致半个字半个字的读,虽然智能的cout输出流可能会把两个字节重新拼成一个汉字,但那不代表你做得对只代表它比你聪明
------解决方案--------------------
 for(int i = 0; i != '\0'; i++)

这是做啥?
目的是这样么?

 for(int i = 0; p[i] != '\0'; i++)
------解决方案--------------------
char *p = "阿萨德法师的";
    for(int i = 0; p[i] != '\0'; i++)
    {
        printf("0x%02X ",(unsigned char)p[i]);
    }

对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……