函数中的 Char 参数在 C 中为 null 或为空
Char parameter in function is null or empty in C
我目前正在学习 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
只能容纳一个元素,因此它只能接受最多为零个字符的字符串(唯一的空间将被终止符占用)空字符)
另一方面,%s
会读取正长度的字符串(它不能读取零字符的字符串),因此在成功读取时会导致超出范围的访问。
分配足够的元素并设置读取的最大长度(最多为终止空字符的元素数最小一)以避免缓冲区溢出。
char name[50];
char gender[2];
/* ... */
printf("\nWrite your name: ");
scanf("%49s", name);
printf("\nWrite your gender (M/F): ");
scanf("%1s", gender);
检查 scanf()
的结果(return 值)以检查它们是否成功读取所需的内容将进一步改进您的代码。
我目前正在学习 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
只能容纳一个元素,因此它只能接受最多为零个字符的字符串(唯一的空间将被终止符占用)空字符)
另一方面,%s
会读取正长度的字符串(它不能读取零字符的字符串),因此在成功读取时会导致超出范围的访问。
分配足够的元素并设置读取的最大长度(最多为终止空字符的元素数最小一)以避免缓冲区溢出。
char name[50];
char gender[2];
/* ... */
printf("\nWrite your name: ");
scanf("%49s", name);
printf("\nWrite your gender (M/F): ");
scanf("%1s", gender);
检查 scanf()
的结果(return 值)以检查它们是否成功读取所需的内容将进一步改进您的代码。