开发者社区> 问答> 正文

为什么出错, char *p=user_name;.*p++为空? 热? 400 报错

为什么出错, char *p=user_name;.*p++为空? 热? 400 报错

void login_user() { char *loguser_name="#tb1234#"; char *loguser_pwd="123456";

char* user_name=NULL; printf("请输入你的账号<以#号键结束>\n"); scanf("[%s]\n",user_name);

char* user_pwd=NULL; //scanf("[%s]\n",user_name); char *p=user_name;

while ( *p++!='\0' && 'a'<*p++ && *p++<'z'|| '1'<*p++ && *p++>'9')//p指向user_name,调试为空 { if(strcmp(p,loguser_name)==0) { printf("user login successful\n"); break; } else { printf("请输入正确的账号\n"); } }

有什么问题呢,输入为什么,老是出错,

展开
收起
爱吃鱼的程序员 2020-06-04 14:18:14 611 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    函数scanf在0x0地址输入一段字符串,直接被清掉了,取p当然就是0,解决办法是char user_name[128];######char user_name[128];也不行呀,p为空######你这段代码错误很多:


    第一:请你好好查看下scanf()函数的格式,你这么写是错误的。


    第二:比如char
    p = "something";这样的语句,something是常量,是不能对其做一些类似于对数组的操作的。


    第三:while循环里面的判别式写的太罗嗦,而且还有的地方还写错了。


    第四:break语句不能放在if语句里面,这样是错误的,break只能在循环里面起作用。


    第五:这只是一个建议...如果你想在程序中保持变量的值不变,请考虑加上const关键字,比如这里:char
    loguser_name = “#tb1234#".完全可以写出const char* loguser_name = ”#tb1234#"这样别人一看就知道这个值不希望被改变。。。


    如有回答不对的地方,请指出,谢谢。。。


    勿喷!!!
    ######前面也有人说了在if 里用break 有什么意义吗? 如果你想从while 循环里跳出那么尝试在while结尾处放一个break######谁说 break不能放在if里?? 难道if在循环中也不行????######木有分配空间######对呀,没分配空间,输入的字符串没地方存######你的user name已经是指针了,再取一次指针意义就不对了。你应该直接在username上操作######user_name已经赋值了######第一,第四,此言差矣。######user_name是常量,往里写值未定义。循环中一次 ++ 那么多次???确定不是未定义行为?而且还在 && 和 || 联合的情况下######哪一次++有没有被 短路都很难看出来。######

    scanf("[%s]\n",user_name);
    scanf表示这个中括号很为难,所以他只好将user_name赋值为NULL了

    ######

    引用来自“月落苍穹”的评论

    scanf("[%s]\n",user_name);
    scanf表示这个中括号很为难,所以他只好将user_name赋值为NULL了

    谢谢了,这个答案是对的,的确是scanf不可以用[],或\n,我与printf混淆了.######

    引用来自“liyu5543”的评论

    你这段代码错误很多:


    第一:请你好好查看下scanf()函数的格式,你这么写是错误的。


    第二:比如char* p = "something";这样的语句,something是常量,是不能对其做一些类似于对数组的操作的。


    第三:while循环里面的判别式写的太罗嗦,而且还有的地方还写错了。


    第四:break语句不能放在if语句里面,这样是错误的,break只能在循环里面起作用。


    第五:这只是一个建议...如果你想在程序中保持变量的值不变,请考虑加上const关键字,比如这里:char* loguser_name = “#tb1234#".完全可以写出const char* loguser_name = ”#tb1234#"这样别人一看就知道这个值不希望被改变。。。


    如有回答不对的地方,请指出,谢谢。。。


    勿喷!!!
    break放在if里边还有意义么?   上述代码错误很多,######你不经常写if,else,for
    2020-06-04 16:24:20
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载