为什么字符串使用的字符串比 C 中的大小更大

Sat*_*Roy -1 c string

我已将字符串的大小设置word为 5。我正在使用 进行输入scanf(),格式说明符为%s。虽然字符串的大小为 5,但如果我输入的字符串大于长度 5,它也会占用整个输入。为什么会发生这种情况?

这是我的 C 程序:

#include <stdio.h>
#include <string.h>

int main() {
  char word[5];
  printf("Enter word: ");
  scanf("%s", word);
  printf("Word: %s\n", word);
  strlwr(word);
  printf("To Lower: %s\n", word);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我输入的AbcDEfghij长度是 10,但它会接受它并正确打印完整的字符串。我怎样才能防止这种情况发生?我不想接受大于尺寸的输入。

dbu*_*ush 8

C 不对数组执行边界检查。这就是它变得快速的部分原因。然而,这也意味着它将允许您做一些您不应该喜欢超出数组范围的事情。当你这样做时,你会触发未定义的行为

当您的程序具有未定义的行为时,它可能会崩溃,可能会给出奇怪的结果,或者可能(如您的情况)看起来正常工作。更糟糕的是,看似无关的更改(例如添加未使用的局部变量或添加printf对调试的调用)可能会改变未定义行为的表现方式。

总而言之,该语言相信您不会做不应该做的事情。