在C中创建一个新的String,以便在不使用fprintf的情况下在大型库(GLib)中使用

时间:2015-09-01 19:26:11

标签: c string error-handling glib

(虽然这个问题看起来似乎特定于GLib或错误处理,但你真的不需要知道任何关于那些问题来回答我的问题。)

我正在尝试使用GLib中的g_set_error来正确处理我的删除文件错误。我对C不是太棒了,但是我的直觉告诉我做下面的事情可能还行(第3行):

void file_delete(const gchar *name) {
    if (remove(name) != 0) {
        gchar *errmsg = ("Error deleting file %s: %s.", name, strerror(errno));
        g_set_error(NULL, SDS_ERROR, 0, errmsg);
    }
    else {
        //log file <name> deleted
    }
}

以这种方式创建新String是否可以?或者我应该将errmsg分成3个单独的字符串并将它们连接起来?还是其他一些方法?

1 个答案:

答案 0 :(得分:1)

不,你不能创建这样的字符串,它会返回strerror(errno)的结果。

在我看来,最好将多个字符串连接在一起。

但是,您可以这样做:

gchar *errmsg = malloc(256); // change this size as needed
snprintf(255, errmsg, "Error deleting file %s: %s.", name, strerror(errno));

如果您更喜欢格式字符串,但不要忘记free(errmsg)

<强>更新

另外,正如@Kninnug在问题的评论中所说:

  

由于你已经使用了GLib,不妨使用他们的字符串实用程序方法,例如g_strdup_printf