gpt4 book ai didi

c - 是 "01234|MY_NAME"= "%s|%s"吗?

转载 作者:行者123 更新时间:2023-11-30 20:32:12 24 4
gpt4 key购买 nike

我无法理解其结果:

    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”给出了之前的输出。

最佳答案

%s 指令告诉 fscanf 跳过任何初始空格并将 1 个或多个非空格字符读入参数 char * .

01234|MY_NAME 都是非空格的,因此它最终被第一个 %s 放置在 str1 中。

然后格式字符串中的 | 告诉 fscanf 读取文字 | 字符。此操作失败,因为没有剩余输入。此时fscanf放弃并返回1以表明它成功填充了其中一个变量。

但是,您的程序忽略了 fscanf 的返回值,因此它没有意识到发生了什么。它盲目地输出 str1 (包含 01234|MY_NAME)和 str2 (未初始化并打印垃圾,直到它碰巧找到 '\0' 在内存中)。

关于c - 是 "01234|MY_NAME"= "%s|%s"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48174795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com