【问题标题】:How to write a small logger using varargs for WinCE如何为 WinCE 使用 varargs 编写小型记录器
【发布时间】:2017-02-28 14:17:58
【问题描述】:

我正在尝试对一些没有日志记录的外部硬件进行一些调查。
为此,我正在使用 C 中的 varargs 制作自己的小型记录器。这是我的代码:

void write(const char* msg, ...)
{
    va_list args;
    va_start(args, msg);

    FILE* file = fopen("/network/cewin/loggerfile.txt", "a");
    if(file != NULL)
    {
        vfprintf(file, msg, args);
        fputc('\n', file);
        fclose(file);
        va_end(args);
    }
}

首先我在 Windows 7 上测试此代码,没有问题,但在 WinCE 上,包含参数的行没有打印出来。

这是一个例子:

write("Hello World") - Works on Win 7 and WinCE
write("Hello %s", "World") - Works on Win7, not on WinCE
write("Hello %i", 5) - Works on Win7, not on WinCE

我试图理解为什么最后 2 行在 Win7 上有效,但在 WinCE 上无效。也许我需要使用 vfprintf 以外的其他东西?

由于硬件原因,我无法检查方法的返回值。

【问题讨论】:

  • 如果fopen 失败,那么您应该检查errno 以找出问题所在...
  • vfprintf 也有返回状态,你知道的。错误处理并不止于检查 file 是否为有效句柄。
  • 这个问题问得不好。请停止讨论,投票结束,让 OP 学习如何重新表述它,以便我们都能理解问题所在。
  • 你应该调用va_end outside if body。
  • @Kobe 当然你可以打开另一个文件并写入它,为什么不呢??

标签: c windows-ce


【解决方案1】:

不是答案 -> 我无法将代码放入 cmets - '静态' 调试函数,不使用 varargs 或 vnprintf

void debugI(char *str, int iValue) 
{
    FILE *debugPtr = fopen ("/debugpath/debugFile.txt", "a");
    fprintf (debugPtr, "debugI %s:%d\n", str, iValue);
    fclose (debugPtr);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2021-12-21
    相关资源
    最近更新 更多