为什么两个字符串数组比较不了

发布于2022-05-14 21:02:52

#includevoid secret() {long k=0,l=0; char mima[4]= "123"; char mima2[4]; char cunmima[4]; printf("请输入密码\n");loop: while((mima2[l]=getch())!='\r') { cunmima[l]=mima2[l]; l++;putchar('*'); }printf("l= %d",l); cunmima[l]=mima2[l];mima[l]=mima2[l]; for(l=0;l<4;l++){ printf("mima = %c",cunmima[l]);system("pause");}for(l=0;l<4;l++){ printf("mima25 = %c",mima[l]);system("pause");}if(strcmp(cunmima,mima)==0){printf("密码正确,登录系统中........");for(l=0;l<3;l++) printf("\n");}else{ k++;if(k==3) {printf("三次错误,自动退出系统 ");exit(0);} printf("密码有误,请重新输入\n"); goto loop;}}void main(){void secret();secret();}为什么两个字符数组,数值一样,比较时却是不相等的呢1,请问为什么会修改默认密码的值2, 数组的最后一个值我不是已经付给他们同样的值了吗,两个比较的数的值应该是一样的吧

2个回答
admin
网友回答2022-05-14
大概看了一下,程序存在的问题: 1、保存密码的数组太小,只有4个字节,当用户输入的字符长度超过4字节时发生数组越界。 2、用户输入的密码录入了回车键值0x0d,且同时修改了默认的密码的值——最后也附加了一个0x0d。 3、使用strcmp()进行比较,该函数为字符串比较,比较时以0x00结束。就算用户正确输入了123回车,但是已经占满了4个字节,该字串没有结束标志,故比较失败。
admin
网友回答2022-05-14
在msvc上,p和a都很好的遵守了对齐的要求;在gcc上,p是对齐的,但是a却不是。其实这个问题在2004年便有人提出来,只是到目前为止一直都没有人动手过。 当然,标准也没有规定x的数组就一定是要对齐的。要解决这个问题,要么重载class的operator new/delete,要么用memalign/aligned_malloc分配出对齐的内存,再placement new。出于易用性,我选择的是操作符重载。

回到
顶部