如何解决函数中的字符参数在 C 中为 null 或为空
我目前正在学习 c
,然后我正在研究函数和数据类型,特别是在这种情况下 char[]
。
我编写的以下代码声明了一个名为 verifyMessage()
的函数并接收两个参数,name
和 gender
。
当我执行函数时,我传递了用户通过控制台输入的两个参数,但是当我打印 name
时,它不打印任何内容。
#include <stdio.h>
int main() {
int i = 0;
double controlNumber = 21200164;
double number = 0;
char name[50];
char gender[1];
int attempts = 5;
int aux = 0;
do {
printf("Introduzca el numero de control: ");
scanf("%lf",&number);
if (controlNumber == number) {
printf("\nWrite your name: ");
scanf("%s",name);
printf("\nWrite your gender (M/F): ");
scanf("%s",gender);
verifyMessage(name,gender);
break;
} else {
i++;
}
} while (i < attempts);
return 0;
}
void verifyMessage(char name[50],char gender[1]) {
if ('M' == gender[0]) {
printf("\n\Name: %s",name);//Here doesn´t print the name
printf("\nMen");
} else if ('F' == gender[0]) {
printf("\nWoman");
} else {
printf("\nInvalid gender");
}
}
解决方法
使用 char gender[1];
和 %s
是危险的,因为 gender
只有一个元素的空间,所以它只能接受最多零个字符的字符串(唯一的空间将被终止 null-字符)
另一方面,%s
将读取正长度的字符串(它不能读取零字符的字符串),因此它会导致成功读取时超出范围访问。
分配足够的元素并设置读取的最大长度(最多元素数减去终止空字符的1)以避免缓冲区溢出。
char name[50];
char gender[2];
/* ... */
printf("\nWrite your name: ");
scanf("%49s",name);
printf("\nWrite your gender (M/F): ");
scanf("%1s",gender);
检查 scanf()
的结果(返回值)以检查它们是否成功读取了所需的内容将进一步改进您的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。