我有一个缓冲区,我不希望用户输入的字符多于缓冲区可以容纳的字符(以避免缓冲区溢出)。
我在用scanf
并做了这样的事情:
char buffer[30] = {'\0'};
scanf("%30s", buffer);
但是,我知道如果用户输入超过 30 个,我会受到保护。但是,如果用户输入超过 30 个,缓冲区是否会以 null 终止?
scanf()
使用“%s”转换说明符会向缓冲区添加一个终止空字符。
But,您要求输入 30 个字符,这实际上意味着 31 个字符,但只有 30 个字符的空间。您应该使用最大字段宽度 29。
char buffer[30] = {'\0'};
scanf("%29s", buffer);
另请注意转换说明符"%c"
工作起来很像"%s"
,但不添加终止空字符,也不丢弃输入中的空格。根据您的期望,它可能比使用“%s”更好。
char buffer[30] = {'\0'};
scanf("%29c", buffer);
buffer[29] = '\0';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)