项目场景:
在一个纯C控制台的学生成绩管理项目中,使用自定义的string.h函数
问题描述:
在对一个结构体的字符串的复制过程中,发现对学生指针sp的密码复制不正常,导致在学生登录时会失败
char *str_cpy(char *dest,const char *src) {
assert(NULL != dest);
assert(NULL != src);
char *p = dest;
while(*src)*p++ = *src++;
return dest;
}
Student *sp;
bool stu_check_login()
{
//把输入的密码保存下来
char pwd[20];
str_cpy(pwd,sp->pwd);
printf("\n");
...
}
原因分析:
作为全局变量,学生指针是被复用的,很显然因为复制前原本的内容是不确定的且没有清空,导致在比较密码的时候实际输入的密码和所输入的密码不同
解决方案:
在str_cpy函数中添加*p = ‘\0’;
char *str_cpy(char *dest,const char *src) {
assert(NULL != dest);
assert(NULL != src);
char *p = dest;
while(*src)*p++ = *src++;
*p = '\0';
return dest;
}