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

printf未打印指定参数:代码预期输出13:Hello World!却仅显示13:

问题排查:printf未打印指定字符串参数

你的代码预期输出13:Hello World!,但实际运行后仅输出13:,问题根源有两个:

1. 指针偏移导致指向无效内存

看这段循环代码:

while (*str++){
   ++Laenge;
}

*str++的执行逻辑是:先读取当前str指向的字符,判断是否为非0(非终止符),然后不管判断结果如何,str都会自增。当循环结束时,str已经指向了字符串末尾'\0'的下一个位置,此时*str访问的是未定义的内存区域,值完全无效。

2. 格式符使用错误

你在printf里用了%c格式符,它只能打印单个字符,但你需要打印整个字符串,应该用%s格式符。

修复方案

方案一:保存原字符串起始地址

#include <stdio.h>
int main(){
  char *str = "Hello World!\n";
  char *original_str = str; // 提前保存起始地址
  int Laenge = 0;

  while (*str++){
    ++Laenge;
  }  
  printf(" %d:%s", Laenge, original_str);
  return 0;
}

方案二:循环后回退指针到起始位置

#include <stdio.h>
int main(){
  char *str = "Hello World!\n";
  int Laenge = 0;

  while (*str++){
    ++Laenge;
  }  
  str -= (Laenge + 1); // 循环总共自增了Laenge+1次,回退到起始位置
  printf(" %d:%s", Laenge, str);
  return 0;
}

内容的提问来源于stack exchange,提问作者n00n04

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:20:32