这是我正在处理的代码的一部分:
void update_log(char *name, pthread_t ID, char *status, char *update)
{
time(&rawtime);
time_str = asctime(localtime(&rawtime));
time_str[strlen(time_str) - 1] = 0;
fprintf(log_file, "[%s] [%12s] [%u] [%s] %s\n", time_str, name, (unsigned int)ID, status, update);
}
输出结果为:
[Sat Mar 9 21:36:20 2013] [ main] [197777152] [OK] ******
[Sat Mar 9 21:36:20 2013] [update_table] [172680960] [OK] **********
[Sat Mar 9 21:36:22 2013] [update_table] [172680960] [OK] ******
[Sat Mar 9 21:36:25 2013] [ main] [197777152] [OK] ****************
有没有办法让 name 变量的输出看起来像这样(所以它仍然需要12个块,仍然会在括号中):
[Sat Mar 9 21:36:20 2013] [main] [197777152] [OK] ******
[Sat Mar 9 21:36:20 2013] [update_table] [172680960] [OK] **********
[Sat Mar 9 21:36:22 2013] [update_table] [172680960] [OK] ******
[Sat Mar 9 21:36:25 2013] [main] [197777152] [OK] ****************
我在考虑在 fprintf()函数之前为 name 变量添加括号,但在C中有一种简单的方法可以将字符添加到字符串的开头?
感谢。
答案 0 :(得分:3)
这对我来说似乎很容易。
#include <stdio.h>
int main()
{
char buffer[16];
sprintf(buffer,"[%s]", "main");
printf("[0] %-14s [2]\n", buffer);
sprintf(buffer,"[%s]", "update_table");
printf("[0] %-14s [2]\n", buffer);
sprintf(buffer,"[%s]", "main");
printf("[0] %-14s [2]\n", buffer);
return 0;
}
的输出强> 的
[0] [main] [2]
[0] [update_table] [2]
[0] [main] [2]
答案 1 :(得分:1)
我没有看到任何简单的方法,但你可以用它来制作另一个字符串:
void update_log(char *name, pthread_t ID, char *status, char *update)
{
time(&rawtime);
time_str = asctime(localtime(&rawtime));
time_str[strlen(time_str) - 1] = 0;
size_t len = strlen(name);
char real_name[len + 3];
real_name[0] = '[';
strncpy(real_name + 1, name, sizeof(real_name));
real_name[len + 1] = ']';
real_name[len + 2] = 0;
fprintf(log_file, "[%s] [%12s] [%u] [%s] %s\n", time_str, real_name, (unsigned int)ID, status, update);
}