如何在不知道输入大小的情况下读取输入?

卡拉姆·贾伯

我正在尝试通过使用scanf运算符来获取输入,但是我也需要它的长度,我无法定义,char name[number]因为我不知道从用户那里得到的输入的大小...

有什么想法不使用怎么办string.h

这是我尝试做的事情,但是由于定义了数组的长度,因此是非法的:

char string1[30];
printf("Enter string1:");
scanf("%s",string1);
g

如果不定义最大大小,您可能不会相处。

重要的是不定义大小,但事后知道并尊重它。

从用户那里获取输入的最简单方法是fgets()

char string1[50];
fgets(string1, sizeof string1, stdin);

当然,您应该检查其返回值。

如果您想(几乎)接受任何长度,都可以尝试我在这里给出的解决方案

这是防止给定数组溢出的必要条件。为了使用该字符串,您可以使用来缩短其长度strlen(),或者,如果不允许使用该字符串,或者仍然要走到字符串上,则可以对字符进行计数,直到达到NUL字节为止。

其背景是C中的字符串以NUL字节终止。它们是chars的序列,并且NUL字节(0,而不是'0'48)终止该序列。


如果您唯一的任务是验证读取的字符串是否足够小,然后抱怨,则只需:-)

int main(int argc, char ** argv)
{
    char string2[50]; // larger than required; in order to be able to check.
    char string1[30]; // if all is ok, you have maximum length of 29, plus the NUL terminator. So 30 is ok.
    char * ret = fgets(string2, sizeof string2, stdin);
    if (!ret) {
        fprintf(stderr, "Read error.\n")
        return 1; // indicate error
    }
    if (strlen(string2) >= sizeof string1) { // we can take this size as a reference...
        fprintf(stderr, "String 1 too long.\n")
        return 1; // indicate error
    }
    strcpy(string1, string2); // as we have verified that this will match, it is ok.
    // Otherwise, we would have to use strncpy.

    // Now read the 2nd string by the same way:
    ret = fgets(string2, sizeof string2, stdin);
    if (!ret) {
        fprintf(stderr, "Read error.\n")
        return 1; // indicate error
    }
    if (strlen(string2) >= sizeof string1) { // we can take this size as a reference...
        fprintf(stderr, "String 2 too long.\n")
        return 1; // indicate error
    }
    // Now we know that both strings are ok in length an we can use strcmp().
    int c = strcmp(string1, string2);
    printf("strcmp() result: %d.\n", c);
    return 0; // indicate success
}

现在还不清楚您是否也应该执行strcmp()如果是这样,我将其保留为练习。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不知道数组大小的情况下输入数组

来自分类Dev

如何在不知道输入类型的情况下创建填充矩阵的方法

来自分类Dev

在不知道字符串大小的情况下动态提示输入字符串

来自分类Dev

在不知道输入大小的情况下对字符串向量进行排序c ++

来自分类Dev

球拍,在不知道什么的情况下从端口读取输入

来自分类Dev

如何在不知道其大小且无需多次读取的情况下从文件加载矩阵?

来自分类Dev

如何在不知道 Javascript 中的 id 的情况下获取输入文本字段的值

来自分类Dev

如何在不知道原始数组大小的情况下增加动态数组(C ++)的大小?

来自分类Dev

如何在不知道数组大小的情况下复制二维数组

来自分类Dev

如何在不知道大小的情况下绘制matlab中的所有矩阵元素?

来自分类Dev

如何在不知道json键的情况下使用JsonReader从json读取值

来自分类Dev

如何在不知道变量名称的情况下读取查询字符串?

来自分类Dev

动态分配-用户在运行时不知道数组大小的情况下输入元素

来自分类Dev

SQL:在不知道总输入量的情况下按顺序跳过输入

来自分类Dev

在不知道大小的情况下打印数组

来自分类Dev

在不知道大小的情况下寻找图标

来自分类Dev

在不知道类型的情况下从文件中读取

来自分类Dev

在不知道其ID的情况下将焦点设置为动态创建的输入字段

来自分类Dev

在不知道行数的情况下逐行输入2d数组元素

来自分类Dev

如何在不知道列表大小的情况下使用redis-cli打印列表中的所有值?

来自分类Dev

Powershell:如何在不知道子网大小的情况下扫描局域网

来自分类Dev

如何在不知道Perl中目录名称的情况下读取目录和子目录?

来自分类Dev

如何在不知道其长度的情况下从文件中读取2D数组?

来自分类Dev

如何在不知道挂载点的情况下知道设备UUID已挂载?

来自分类Dev

Parse.com-如何在不知道密码的情况下以用户身份登录?

来自分类Dev

如何在不知道iOS中的UUID的情况下检测ibeacon设备?

来自分类Dev

CoreBluetooth框架:如何在不知道服务ID的情况下获取连接的设备?

来自分类Dev

Javascript:如何在不知道键名的情况下解析json数组?

来自分类Dev

如何在不知道包名称的情况下从adb删除应用程序?

Related 相关文章

  1. 1

    在不知道数组大小的情况下输入数组

  2. 2

    如何在不知道输入类型的情况下创建填充矩阵的方法

  3. 3

    在不知道字符串大小的情况下动态提示输入字符串

  4. 4

    在不知道输入大小的情况下对字符串向量进行排序c ++

  5. 5

    球拍,在不知道什么的情况下从端口读取输入

  6. 6

    如何在不知道其大小且无需多次读取的情况下从文件加载矩阵?

  7. 7

    如何在不知道 Javascript 中的 id 的情况下获取输入文本字段的值

  8. 8

    如何在不知道原始数组大小的情况下增加动态数组(C ++)的大小?

  9. 9

    如何在不知道数组大小的情况下复制二维数组

  10. 10

    如何在不知道大小的情况下绘制matlab中的所有矩阵元素?

  11. 11

    如何在不知道json键的情况下使用JsonReader从json读取值

  12. 12

    如何在不知道变量名称的情况下读取查询字符串?

  13. 13

    动态分配-用户在运行时不知道数组大小的情况下输入元素

  14. 14

    SQL:在不知道总输入量的情况下按顺序跳过输入

  15. 15

    在不知道大小的情况下打印数组

  16. 16

    在不知道大小的情况下寻找图标

  17. 17

    在不知道类型的情况下从文件中读取

  18. 18

    在不知道其ID的情况下将焦点设置为动态创建的输入字段

  19. 19

    在不知道行数的情况下逐行输入2d数组元素

  20. 20

    如何在不知道列表大小的情况下使用redis-cli打印列表中的所有值?

  21. 21

    Powershell:如何在不知道子网大小的情况下扫描局域网

  22. 22

    如何在不知道Perl中目录名称的情况下读取目录和子目录?

  23. 23

    如何在不知道其长度的情况下从文件中读取2D数组?

  24. 24

    如何在不知道挂载点的情况下知道设备UUID已挂载?

  25. 25

    Parse.com-如何在不知道密码的情况下以用户身份登录?

  26. 26

    如何在不知道iOS中的UUID的情况下检测ibeacon设备?

  27. 27

    CoreBluetooth框架:如何在不知道服务ID的情况下获取连接的设备?

  28. 28

    Javascript:如何在不知道键名的情况下解析json数组?

  29. 29

    如何在不知道包名称的情况下从adb删除应用程序?

热门标签

归档