最近我在用 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/