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

printf中%s后续字符覆盖输出开头字符的问题咨询

printf中%s后续字符覆盖输出开头字符的问题咨询

嘿,这个问题我之前踩过坑!其实罪魁祸首就是你定义的user_agent字符串末尾的那个\r(回车符)!

你可能不知道,\r的作用是把输出光标移到当前行的开头位置,而不是换行(换行是\n)。当printf输出%s对应的user_agent时,最后那个\r会让光标瞬间跳回行首,紧接着输出的冒号:就会覆盖掉行首的第一个字符A,于是原本应该是AGENT:的开头就变成了:GENT:,剩下的内容跟着输出,就出现了你看到的奇怪结果。

给你两个解决办法:

  • 如果这个\r是你手动加的,直接删掉就行,把字符串改成char user_agent[] = "foobar/1.2.3";
  • 如果\r是从外部输入(比如网络请求、文件读取)带进来的,可以手动处理掉它,比如用字符串函数找到并替换成字符串结束符\0,示例代码如下:
#include <stdio.h>
#include <string.h>

int main() {
    char user_agent[] = "foobar/1.2.3\r";
    // 获取字符串长度,检查末尾是否是\r
    size_t str_len = strlen(user_agent);
    if (str_len > 0 && user_agent[str_len - 1] == '\r') {
        // 把\r替换成字符串结束符,截断掉它
        user_agent[str_len - 1] = '\0';
    }
    printf("AGENT: %s:\nHELLO", user_agent);
    return 0;
}

修改之后再运行,就能得到你预期的输出:AGENT: foobar/1.2.3: HELLO啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:42:58