(虽然这个问题看起来似乎特定于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个单独的字符串并将它们连接起来?还是其他一些方法?
答案 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