【问题标题】:Character Array and Null character字符数组和空字符
【发布时间】:2020-04-03 11:11:08
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    char str[4];

    scanf("%s",str);
    printf("%s",str);
}

输入扫描 输出扫描

这里我声明了一个由 4 个字符组成的数组。我使用了用于字符串的“%s”。当 NULL 字符应使用一个空格时,我无法理解如何输入 4 个 char 元素并获得正确答案。输入最多只能使用 3 个元素。

【问题讨论】:

标签: c


【解决方案1】:

scanf() 不检查其参数。您甚至可以输入超过 4 个字符,scanf() 会很高兴地覆盖数组之后的内存区域。在那之后,您的程序可能会崩溃或发生各种有趣的事情。这称为缓冲区溢出,它是软件漏洞的常见原因。

【讨论】:

    【解决方案2】:

    如上所述,当您输入超过 3 个字符时,额外的字符和 \0 将被写入数组内存之外(在它之后)并覆盖不属于数组的内存。这将导致未定义的行为.

    但您可以使用这些来防止发生缓冲区溢出:

    scanf("%3s",str);

    fgets(str, sizeof str, stdin)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 2020-01-04
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多