printf的替代和可能更好的方法

时间:2013-05-03 13:21:27

标签: c printf

我正在使用printf as:

将一些字符串写入gstring
char *string<i> 
/*where string<i> stands for string1, string2
and so on*/
 g_string_append_printf (ustring, "@%s{%s,\n",string1, string0);
if( strlen(string2)!=0 ||string2!=NULL)
 g_string_append_printf (ustring,"\tAuthor=\"%s\",\n", string2);
if( strlen(string3)!=0 ||string3!=NULL)
 g_string_append_printf (ustring,"\tYear=\"%s\",\n", string3);
if( strlen(string4)!=0 ||string4!=NULL)
g_string_append_printf (ustring, "\tTitle=\"%s\",\n", string4);

GLib在这里可能不是很重要。将其视为

printf ("\tAuthor=\"%s\",\n", string<i>)

当这个工作得相当好时,似乎不是最好的方式(我有字符串字符串&lt; 1&gt;到字符串&lt; 30&gt;),我正在寻找更好的方法。

要考虑的要点

  1. 任何字符串都可能为空/ NULL,由前面的每一行检查 printf的。

  2. 如果完整的印刷品作为一种功能

  3. 会更好

    有更好的方法来实现吗?

1 个答案:

答案 0 :(得分:3)

通过将其包装在函数中来消除重复检查字符串是NULL还是空的重复:

void conditionally_append_string(char* out, const char* fmt, const char* in)
{
    /* Check for NULL before dereferencing.
       Just check if first character is NOT null terminator
       instead of invoking strlen(). */
    if (in && *in)
    {
        g_string_append_printf (out, fmt, in);
    }
}

conditionally_append_string(ustring, "@%s{\n",             string0);
conditionally_append_string(ustring, "%s,\n",              string1);
conditionally_append_string(ustring, "\tAuthor=\"%s\",\n", string2);