【发布时间】:2018-01-09 18:46:43
【问题描述】:
我无法理解这个结果:
fscanf(FILE,"%s|%s", str1, str2);
printf("Number:%s, Name:%s", str1, str2);
文件内容:
01234|MY_NAME
预期输出:
Number:01234, Name:My_NAME
输出:
Number:01234|MY_NAME, Name:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠01234|MY_NAME
有人能解释为什么它会给出这样的输出吗?
P/s:我已经用这段代码解决了:
fscanf(FILE,"%[^|]|%[^|]", str1, str2);
printf("Number:%s, Name:%s", str1, str2);
但我还是不明白为什么 "%s|%s" 给出了之前的输出。
【问题讨论】:
-
您可能会发现documentation for
scanf,尤其是格式说明符及其工作方式部分会有所帮助。我怀疑您需要[set]配置,但您最终会确认这一点。 -
这种解析工作最好使用
fgets(或getline,如果可用)和strtok(或strsep,如果可用)来完成。scanf几乎总是比它的价值更麻烦,即使忽略%s与gets一样危险,并且数字溢出会引发未定义的行为。 -
"我还是不明白为什么 "%s|%s" 给出...号码:01234|MY_NAME,姓名:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠01234|MY_NAME”。 “编号:01234|MY_NAME”是否令人困惑?
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example。