C Printf输出顺序错误-如何修复此问题?

C Printf输出顺序错误-如何修复此问题?,c,printf,C,Printf,我有一份printf声明: printf("Loaded library (%s)\n", libName, libNameCreationTime()); 这样我就可以以 [6-19-2020 9:27:00 PM] Loaded library (C:/.../...) Loaded library (C:/.../...) [6-19-20 9:27:00 PM] 但我需要输出的格式 [6-19-2020 9:27:00 PM] Loaded library (C

我有一份printf声明:

printf("Loaded library (%s)\n", libName, libNameCreationTime());
这样我就可以以

[6-19-2020 9:27:00 PM] Loaded library (C:/.../...)
Loaded library (C:/.../...) [6-19-20 9:27:00 PM]
但我需要输出的格式

[6-19-2020 9:27:00 PM] Loaded library (C:/.../...)
Loaded library (C:/.../...) [6-19-20 9:27:00 PM]
libNameCreationTime负责打印时间。 libName是路径C:/…/

这个printf语句只需要打印加载的库路径名[创建时间]。它以错误的顺序打印正确的东西

基本上,时间应该在最后打印出来。我一直在搞乱格式说明符,但没有用。这应该是一个非常简单的修复方法,但我无法解决。

格式后面只有一个“%”,但有两个参数,因为第一个是具有输出的变量

[6-19-2020 9:27:00 PM]加载的库C:/…/

这意味着函数libNameCreationTime打印[6-19-2020 9:27:00 PM]

那就有

已加载的库C:/…/。。。[6-19-20晚上9:27:00]

事实上,代码

相当于

 libNameCreationTime();
 printf("Loaded library (%s)\n", libName);
例如:

#include <stdio.h>

int libNameCreationTime()
{
  fputs("[6-19-2020 9:27:00 PM] ", stdout);
  return 0;
}

int main()
{
  const char * libName = "C:/.../...";
  
  printf("Loaded library (%s)\n", libName, libNameCreationTime());
  
  puts("------------------------");
  
  libNameCreationTime();
  printf("Loaded library (%s)\n", libName);
  
  puts("------------------------");
  
  printf("Loaded library (%s) ", libName);
  libNameCreationTime();
  putchar('\n');
  
  return 0;
}

libNameCreationTime返回什么?printf%s加载的库\n?!?顺便说一句,您的代码与输出不匹配。您可以创建一个小型的自给自足且可运行的示例吗?我认为你提供的代码没有显示全部信息。你确定你的代码吗?您的格式中只有1%,但格式后有两个参数问题结束得太快。要使您的行为正常,函数libNameCreationTime会打印[6-19-2020 9:27:00 PM],以便加载库C:/…/。。。[6-19-20 9:27:00 PM]是否打印已加载的库%s,libName;libNameCreationTime;putchar'\n';还允许printf中有“正常”数量的arg。目前您的代码类似于libNameCreationTime;printfLoaded库%s\n,libName;嘿,谢谢你提供了清晰简洁的例子。你的解决方案有效。谢谢你帮我了解我的新秀颜色。。将来会记得的!
#include <stdio.h>

int libNameCreationTime()
{
  fputs("[6-19-2020 9:27:00 PM] ", stdout);
  return 0;
}

int main()
{
  const char * libName = "C:/.../...";
  
  printf("Loaded library (%s)\n", libName, libNameCreationTime());
  
  puts("------------------------");
  
  libNameCreationTime();
  printf("Loaded library (%s)\n", libName);
  
  puts("------------------------");
  
  printf("Loaded library (%s) ", libName);
  libNameCreationTime();
  putchar('\n');
  
  return 0;
}
pi@raspberrypi:/tmp $ gcc -Wall c.c
c.c: In function ‘main’:
c.c:13:10: warning: too many arguments for format [-Wformat-extra-args]
   printf("Loaded library (%s)\n", libName, libNameCreationTime());
          ^~~~~~~~~~~~~~~~~~~~~~~
pi@raspberrypi:/tmp $ ./a.out
[6-19-2020 9:27:00 PM] Loaded library (C:/.../...)
------------------------
[6-19-2020 9:27:00 PM] Loaded library (C:/.../...)
------------------------
Loaded library (C:/.../...) [6-19-2020 9:27:00 PM] 
pi@raspberrypi:/tmp $