我无法理解这个结果:
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”给出了之前的输出。
答案 0 :(得分:0)
%s
指令告诉fscanf
跳过任何初始空格并将1个或多个非空白字符读入参数char *
。
01234|MY_NAME
非空格,因此最终会被第一个str1
放入%s
。
然后格式字符串中的|
告诉fscanf
读取文字|
字符。这会失败,因为没有输入。此时fscanf
放弃并返回1
以表示它已成功填充其中一个变量。
但是,您的程序会忽略fscanf
的返回值,因此它不会意识到发生了什么。它会盲目输出str1
(包含01234|MY_NAME
)和str2
(未初始化并打印垃圾,直到它在内存中找到'\0'
为止。