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
相关产品推荐
相关产品推荐

