【发布时间】:2018-08-28 19:23:41
【问题描述】:
char szA[256]={0};
scanf("%[^a]%s",&szA); //failed when trailing string
scanf("%[^a]|%s",&szA); //worked whatever the input
'|' 是什么意思表示格式字符串。我找不到官方规范。有没有人可以给我一些线索?
当我输入带有多个“|”的内容时,后一个仍然有效(只是意味着程序没有崩溃)。它不需要在格式字符串之后给出两个缓冲区。前一个在输入字符串可以分成多个字符串时崩溃。因此,它们之间还有其他区别。它是什么 ?
所以,我不明白为什么当缓冲区数小于指令数而前一个失败时,后一个工作。或者有人可以给我一个输入字符串以使后者崩溃。
【问题讨论】:
-
“作品”对于
scanf来说是一个非常不精确的词。如果格式包含与输入不匹配的文字字符,则 scanf 将停止扫描。由于它总是返回成功转换的次数,因此您甚至无法判断它是否提前停止,除非在文字字符之后有转换。在这种情况下,您可能会看到 scanf 返回 1,这就是为什么它在尝试将字符串存储到不存在的参数时不会崩溃的原因。如果这对您“有效”,那么我想您很幸运。 -
是的。感谢您的建议。 “作品”在这里仅表示未损坏。我会注意字的精确度。 :)
标签: c++ c scanf placeholder