如何打印字符串输出到文件?



我正在尝试修改一个小程序,将文本从输入窗口写入文本文件。我对C不是很熟悉,也做了一些测试。

void wr_wprintf(wr_window_t *window, wi_string_t *fmt, ...) {
wi_string_t             *string;
va_list                 ap;
va_start(ap, fmt);
string = wi_string_init_with_format_and_arguments(wi_string_alloc(), fmt, ap);
va_end(ap);
wr_wprint(window, string);
FILE *fp;
fp = fopen("/home/pi/test", "w");
fprintf(fp, string);
fclose(fp);
wi_release(string);
}

命令wr_wprint(window, string);是文本的输出。正如你所看到的,我已经用fopen尝试了一些东西。但它没有写文件。文件已创建,但里面没有任何内容。

UPDATE

访问正在使用的库repo后,我找到了wi_string_t的定义。它是libwired子模块的一部分。由此,可以在libwired/data/wi-string.c中找到wi_string_t的定义。它在c文件中定义的事实(传统上)意味着您的程序不知道结构体的内容。这意味着wi_string_t*充当一个"不透明指针"。因为我们必须假装不知道结构体的内容,所以必须利用wi-string.h中定义的API函数。我能够在那里找到以下内容:

93 WI_EXPORT wi_uinteger_t                     wi_string_length(wi_string_t *);
94 WI_EXPORT const char *                      wi_string_cstring(wi_string_t *);
95 WI_EXPORT char                              wi_string_character_at_index(wi_string_t *, wi_uinteger_t);
在第94行,我们有函数wi_string_cstring。将const char*返回给数据本身的函数。这正是我们需要的。

下面的代码应该可以为你工作,但我没有编译库来确定:

void wr_wprintf(wr_window_t *window, wi_string_t *fmt, ...) {
wi_string_t             *string;
va_list                 ap;
va_start(ap, fmt);

string = wi_string_init_with_format_and_arguments(wi_string_alloc(), fmt, ap);
va_end(ap);
wr_wprint(window, string);
FILE *fp;
fp = fopen("/home/pi/test", "w");
if (fp == NULL) {
// error handling
} else {
fputs(wi_string_cstring(string), fp);
fclose(fp);
}
wi_release(string);
}

最新更新