You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串输出写入文件?C语言代码调试求助

问题分析与修复

你的代码里fprintf(fp, string);这一行是核心问题:fprintf的第二个参数需要C风格字符串(const char*),但你传入的是自定义的wi_string_t*对象,fprintf无法识别这个类型的内容,所以文件创建成功但写不进数据。

另外,代码里没有检查fopen是否成功,如果路径权限不足或者文件无法打开,会导致后续操作出错,也需要补上错误判断。

修复步骤

  1. 获取C风格字符串:这类自定义字符串库通常会提供获取内部const char*的接口,比如wi_string_get_cstring()或者wi_string_data()(具体要看你使用的库文档,这里假设是wi_string_get_cstring)。
  2. 替换fprintf为fputs(或正确使用fprintf):如果不需要格式化,直接用fputs更安全;如果要用fprintf,需要把C字符串作为参数传入。
  3. 增加错误检查:判断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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:05:25