如何将字符串输出写入文件?C语言代码调试求助
问题分析与修复
你的代码里fprintf(fp, string);这一行是核心问题:fprintf的第二个参数需要C风格字符串(const char*),但你传入的是自定义的wi_string_t*对象,fprintf无法识别这个类型的内容,所以文件创建成功但写不进数据。
另外,代码里没有检查fopen是否成功,如果路径权限不足或者文件无法打开,会导致后续操作出错,也需要补上错误判断。
修复步骤
- 获取C风格字符串:这类自定义字符串库通常会提供获取内部
const char*的接口,比如wi_string_get_cstring()或者wi_string_data()(具体要看你使用的库文档,这里假设是wi_string_get_cstring)。 - 替换fprintf为fputs(或正确使用fprintf):如果不需要格式化,直接用
fputs更安全;如果要用fprintf,需要把C字符串作为参数传入。 - 增加错误检查:判断
fopen是否成功,避免空指针操作。
修改后的代码
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 = fopen("/home/pi/test", "w"); if (fp != NULL) { // 获取wi_string对应的C风格字符串 const char* c_str = wi_string_get_cstring(string); // 写入文件,用fputs更直接,不需要格式化 fputs(c_str, fp); // 或者用fprintf:fprintf(fp, "%s", c_str); fclose(fp); } else { // 可以在这里加错误提示,比如perror("Failed to open file"); } wi_release(string); }
额外说明
- 如果你不确定
wi_string_t的C字符串获取接口,查一下这个库的文档,通常命名会类似wi_string_as_cstr、wi_string_get_data这类。 - 用
"w"模式打开文件会清空原有内容,如果需要追加内容,改成"a"模式。
内容的提问来源于stack exchange,提问作者Sascha7777
相关产品推荐
相关产品推荐

