【发布时间】:2012-10-01 03:28:21
【问题描述】:
我不确定如何将不同的字符串类型传递给 C 中的函数。
我有一个接收格式化字符串的函数
void Logger::info(const char *logstring, ...)
{
// So I basically can write a preliminary message "DATA:" to a buffer
// and then use vsnprintf() to write the const char *logstring to the buffer as well.
int offset = 0;
va_list argp;
char buf[STRSIZE + 1];
va_start(argp, logstring);
offset = sprintf(buf, "DATA: ");
vsnprintf(&buf[offset], STRSIZE - offset, logstring, argp);
va_end(argp);
// Then I write the buffer to stderr
fprintf(stderr, "%s\n", buf);
}
我想做的是将所有这些更深入地移动到函数中。但我不能让它工作,因为我不知道如何成功地将格式化字符串“logstring”传递给函数并让它从另一边出来。
所以我想这样做......
info(const char *logstring, ...)
{
writeToFile("Data:",logstring);
}
然后我可以更集中地完成日志文件的写入。
【问题讨论】:
-
您是否在问如何将可变参数从您的顶级函数发送到 writeToFile() 函数?或者如何执行格式,然后将序言和格式化数据发送到 writeToFile() ?也许两者都不是,你在问别的吗?抱歉,对这个问题有点困惑。
-
也差不多。我希望能够将“const char *logstring”传递给函数。因此,如果我可以只需要将我的函数变量更改为接受它的东西,或者只是将其转换为可以通过的东西,那就更好了。我会举例说明我尝试过的方法,但由于它们不起作用,因此会使事情变得混乱。要么以某种方式作为一个字符串出现,要么丢失了应该在字符串中的格式化变量。
-
好的。我觉得我明白了。我可以尝试制定一个答案,但我想只是告诉你可以创建一个以 va_list 作为参数的函数(事实上,vsnprintf 就是这样一个例子)。具有讽刺意味的是,您在这里的代码看起来拥有您需要的一切,只是没有在正确的地方完成您想要的。
标签: c string char constants formatted