我想把一个字符串中的某一个字符拷贝到另一个字符数组中去,检验一遍确是这样的,我想或许是‘\0’的问题,改成pa[2]问题就解决了,
但为什么它会倒着打印出来,我把a首元素赋给pa的首元素,再不济也应该是qweer,但结果确是qqweer
恳请大家不吝指教,谢谢
#include
int main()
{
char a[]= {"qweer"};
char pa[]= {0};
char pb[]= {0};
*pa=*a;
*pb=*(a+2);
printf("%s\n",pa);
printf("%s\n",pb);
return 0;
}
结果:
qqweer
eqqweer
char pa[]= {0};
char pb[]= {0};
这种写法,数组只分配了一个字节啊,等于pa和pb字符串没有字符串结束符了,改成char pa[2]={0}就可以保证有字符串结束符
你说对了,就是\0的问题
因为数组长度只有1,没有结束符,那么按照%s打印的时候,指针必须指到\0才会结束,导致了越界
pa的内存和a的内存是连续的,打印完pa就继续打印a了
pb也一样,打印完pb打印pa,再打印a,直到\0
当然你换个编译器,分配内存的方式换了,那么打印的也可能变成乱码