c - 一个小查询,C 中的字符串

标签 c string codeblocks

最近我在用 Code Blocks 编程,我做了一个小程序,只是出于对 C 的兴趣。

char littleString[1];

fflush( stdin );
scanf( "%s", littleString );
printf( "\n%s", littleString);

如果我创建了一个包含一个字符的字符串,为什么 CodeBlocks 允许我保存 13 个字符?

最佳答案

C 没有边界检查,编译器无法检查超出数组边界或动态分配内存的写入。相反,它会导致未定义的行为

scanf防止缓冲区溢出您可以告诉它只读取特定数量的字符,仅此而已。因此,要告诉它只读取一个字符,您可以使用格式 "%1s"

作为一个小旁注:请记住,C 中的字符串中有一个额外的字符,即终止符(字符'\0')。因此,如果您有一个应该包含一个字符的字符串,那么大小实际上需要是 两个 个字符。

关于c - 一个小查询,C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211578/

相关文章:

c - 为什么我的电脑一次性发送超过1514字节的数据包

将字符串从文件复制到结构数组时崩溃

c++ - 如何在 CodeBlocks 中运行 C++ 程序

c - 如何将一个C程序拆分成多个文件?

c - 圆上动态增长的梯度

c - 指向 C 中函数的指针

.net - 如何在字符串中包含 "

c - 如何在项目外的 CodeBlocks 中编译和运行 C 文件?

C# 从带引号的字符串中删除分隔符

java - 从每行中删除特定文本