案例代码
其中
是主要函数体
其中 int i = 0;意义为:声明一个整数变量 i,作为字符串数组的下标(索引)。初始化为 0,表示从字符串的第一个字符开始访问(C语言数组下标从 0 开始)。
是for循环条件既:只要当前字符不是结束符(‘\0’),就继续循环;一旦遇到 \0,循环立刻停止。 这样就保证了下标 i 永远不会越界读取后面的垃圾数据。而str[i] 表示当前下标 i 对应的那个字符。'\0' 是 C 语言的字符串结束符(ASCII码为 0)。在 C 语言中,任何字符串的末尾都会被系统自动加上一个 \0,用来标记“字符串到这里就结束了”。
做迭代更新既:每次循环体执行完后,i 加 1。这样下一次循环时,str[i] 就会去访问下一个字符。
⚠️ 极重要的安全提醒:
这个循环能安全结束的前提是:str 数组中必须含有 \0。
-
如果你用的是
scanf("%s", str),它是安全的,因为它会自动在末尾补\0。 -
但如果你手动定义了一个数组并且填满了 50 个字符(没有留空位),或者直接用指针指向了一块没有结束符的内存,
str[i] != '\0'就会永远成立,导致i无限增加,造成数组越界(段错误 / Segmentation Fault)。这也是为什么 C 语言字符串操作很容易崩溃的原因。
💡 常见应用场景:
我们很少写这种循环只是为了数数,通常是为了处理字符串里的每一个字符,例如:
-
转大写:
str[i] = toupper(str[i]); -
统计某个字母出现次数:
if (str[i] == 'a') count++; -
字符串拷贝:
dest[i] = src[i];(在循环外最后补一个dest[i] = '\0';)
这段代码必须写在for{}循环里面否则i的定义会失效
format: "%c " (核心格式控制)
-
format::这是编辑器(IDE)的提示,告诉你第一个参数是“格式化字符串”。 -
%c:这是字符(Character)的占位符。它告诉printf:“我这里要放一个单独的字符”。(对比之前的%s,%s是用来放整个字符串的)。
str[i] (填充的数据)
这是对应 %c 的实际参数。str 是字符串数组,i 是当前循环的下标,str[i] 就是当前正在处理的这个字符。printf 会把 str[i] 的值填到 %c 的位置。
⚠️ 易错点与注意事项:
-
%c和%s绝对不能混用:-
用
printf("%c", str)会报错或打印出乱码,因为%c期待一个单字符,而你给了它一个地址。 -
用
printf("%s", str[i])会导致程序崩溃/输出错误值,因为%s期待一个地址(字符串),而你给了它一个字符(ASCII码值,会被当成非法内存地址访问)。
-
-
中文字符问题:
%c通常用于打印 ASCII 字符(英文、数字、标点)。如果str里有中文,%c打印出来可能会是乱码,因为一个中文字符通常占 2 到 3 个字节(UTF-8 下占 3 字节),而%c每次只读一个字节。
知识串联
-
for (int i = 0; str[i] != '\0'; i++)逐个遍历。 -
printf("%c ", str[i])逐个打印。 [[特殊换行代码]]
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
最后更新于 ,距今已过 2 天
部分内容可能已过时