3

これは私が取り組んでいるコードの一部です:

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変数の出力を次のようにする方法はありますか?

[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 で文字列の先頭に文字を追加する簡単な方法はありますか?

ありがとう。

4

3 に答える 3

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]
于 2013-03-10T06:51:53.323 に答える
2

最初に name 変数の先頭と末尾に角かっこを追加してから、%12s行ったように name を出力できますが、右揃えではなく左揃えにすることができます(これがデフォルトです)。

strcat を使用して、先頭と末尾にブラケットを追加できます。参照: C で const/literal 文字列を連結するにはどうすればよいですか?

そして、このリンクは左揃えの方法を示しています: (フラグ表を参照) http://www.cplusplus.com/reference/cstdio/printf/

于 2013-03-10T06:55:02.953 に答える
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);
}
于 2013-03-10T06:51:15.837 に答える