我在一段C程序中遇到了这个问题:
请解释它是如何工作的,以及为什么?
char str[100];
scanf(" %[^\n]", str);
请解释它是如何工作的,以及为什么?
该scanf
格式字符串由两部分组成:
' '
、'\t'
、'\n'
等)%[^\n]
转换规范,匹配不包含换行符('\n'
)的所有字符的字符串,并将其(加上一个终止的 '\0'
字符)存储在 str
中。请注意,如果输入(在前导空格和第一个换行符之后)超过99个字符,则该函数会出现未定义行为,因为 str
只能容纳100个字符,包括终止的 '\0'
字符。更安全的选择是:
scanf(" %99[^\n]", str);
char *str=NULL; scanf(" %m[^n]", &str);
然后记得稍后 free(str)
。 - nmichaels[^\n]
搜索换行符
因此它会扫描字符串直到按下回车键