首页 > 解决方案 > 什么是创建结构并向其写入元素的正确方法,但在 C 中存在限制

问题描述

我正在创建一个应用程序,访问者在其中输入他们的数据,并且该数据进入一个数组。此外,应用程序也有一些限制,用户最多可以输入 20 个字符的名字和姓氏。我的问题是,我应该在结构中指明什么容量?也许 1024 或只有 20?另外,我应该使用什么扫描方法来获取该数据,因为我使用scanf ("% [^ \ n]% * c")但也许使用起来更安全gets()fgets ()我还在我的程序中检查了输入长度strlen,但我不知道它是否真的需要。

typedef struct Guests
{
    char Name[20];
    char LastName[20];
} Guests

更新:

    char name[20];
        printf("Please, enter name:");
        scanf("%[^ \ n]s", name);
        while(check_Input_Name(name)==1 || strlen(name)>=20)
        {
            printf("You not entered numbers OR name was too long\n");
            printf("Please, try again: ");
            scanf("%[^ \ n]s", name);
        }


bool check_Input_Name(char *Name) {
    for(int i=0; Name[i]; ++i)
    {
        if(isalpha(Name[i])==0 && Name[i]!=' ')
        {
            return 1;
        }
    }
    if (isupper(Name[0])==0)
    {
        return 1;
    }

    for(int i=0; Name[i]; ++i)
    {
        if(Name[i]==' ')
        {
            if (isupper(Name[i+1])==0)
            {
                return 1;
            }
        }
    }

    return 0;
}

标签: arraysclimitcapacity

解决方案


输入例程必须稳健地处理长的,甚至是极端的输入,并确保只有有效数据(有效长度)被移交给进一步处理。

数据应定义为保持允许的最大值,仅此而已。数据结构受到上述健壮输入例程的保护。


推荐阅读