函数中的 Char 参数在 C 中为 null 或为空

Char parameter in function is null or empty in C

我目前正在学习 c,然后我正在研究函数和数据类型,特别是在本例中 char[]

我编写的以下代码声明了一个名为 verifyMessage() 的函数并接收两个参数,namegender

当我执行该函数时,我传递了用户通过控制台输入的两个参数,但是当我打印 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 值)以检查它们是否成功读取所需的内容将进一步改进您的代码。