在不使用 fprintf 的情况下在 C 中创建用于大型库 (GLib) 的新字符串

Creating a new String in C for use in a large library (GLib) without using fprintf

(虽然这个问题一开始看起来可能特定于 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
    }
}

这样创建一个新的字符串可以吗?或者我应该将 errmsg 拆分为 3 个单独的字符串并将它们连接起来?或者其他方法?

不,您不能创建这样的字符串,那将是 return 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 在问题的评论中所说:

Since you're using GLib already, might as well use their string utility methods, such as g_strdup_printf