852 字
4 分钟
如何实现把每一位上的数独立输出出来(for循环)既 C 语言中手动遍历字符串的经典写法

案例代码

Pasted image 20260922164034|700

其中 Pasted image 20260922164209 是主要函数体 其中 int i = 0;意义为:声明一个整数变量 i,作为字符串数组的下标(索引)。初始化为 0,表示从字符串的第一个字符开始访问(C语言数组下标从 0 开始)。

Pasted image 20260922164528 是for循环条件既:只要当前字符不是结束符(‘\0’),就继续循环;一旦遇到 \0,循环立刻停止。 这样就保证了下标 i 永远不会越界读取后面的垃圾数据。而str[i] 表示当前下标 i 对应的那个字符。'\0' 是 C 语言的字符串结束符(ASCII码为 0)。在 C 语言中,任何字符串的末尾都会被系统自动加上一个 \0,用来标记“字符串到这里就结束了”。

Pasted image 20260922164728做迭代更新既:每次循环体执行完后,i 加 1。这样下一次循环时,str[i] 就会去访问下一个字符。

⚠️ 极重要的安全提醒:#

这个循环能安全结束的前提是:str 数组中必须含有 \0。

  • 如果你用的是 scanf("%s", str),它是安全的,因为它会自动在末尾补 \0。

  • 但如果你手动定义了一个数组并且填满了 50 个字符(没有留空位),或者直接用指针指向了一块没有结束符的内存,str[i] != '\0' 就会永远成立,导致 i 无限增加,造成数组越界(段错误 / Segmentation Fault)。这也是为什么 C 语言字符串操作很容易崩溃的原因。

💡 常见应用场景:#

我们很少写这种循环只是为了数数,通常是为了处理字符串里的每一个字符,例如:

  1. 转大写:str[i] = toupper(str[i]);

  2. 统计某个字母出现次数:if (str[i] == 'a') count++;

  3. 字符串拷贝:dest[i] = src[i];(在循环外最后补一个 dest[i] = '\0';)

Pasted image 20260922165116 这段代码必须写在for{}循环里面否则i的定义会失效

format: "%c " (核心格式控制)#

  • format::这是编辑器(IDE)的提示,告诉你第一个参数是“格式化字符串”。

  • %c:这是字符(Character)的占位符。它告诉 printf:“我这里要放一个单独的字符”。(对比之前的 %s,%s 是用来放整个字符串的)。

str[i] (填充的数据)#

这是对应 %c 的实际参数。str 是字符串数组,i 是当前循环的下标,str[i] 就是当前正在处理的这个字符。printf 会把 str[i] 的值填到 %c 的位置。

⚠️ 易错点与注意事项:#

  1. %c 和 %s 绝对不能混用:

    • 用 printf("%c", str) 会报错或打印出乱码,因为 %c 期待一个单字符,而你给了它一个地址。

    • 用 printf("%s", str[i]) 会导致程序崩溃/输出错误值,因为 %s 期待一个地址(字符串),而你给了它一个字符(ASCII码值,会被当成非法内存地址访问)。

  2. 中文字符问题:%c 通常用于打印 ASCII 字符(英文、数字、标点)。如果 str 里有中文,%c 打印出来可能会是乱码,因为一个中文字符通常占 2 到 3 个字节(UTF-8 下占 3 字节),而 %c 每次只读一个字节。

知识串联#

  • for (int i = 0; str[i] != '\0'; i++) 逐个遍历。

  • printf("%c ", str[i]) 逐个打印。 [[特殊换行代码]]

如何实现把每一位上的数独立输出出来(for循环)既 C 语言中手动遍历字符串的经典写法
https://irinsho.top/posts/how-to-output-each-digit-separately-using-a-for-loop-the-classic-way-of-manually-iterating-over-a-string-in-c/
作者
IRinsho
发布于
2026-09-23
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取