|
发表于 2024-8-1 12:56:32
|
显示全部楼层
在第一个 while 循环中,while(*p) 的目的是找到字符串的结束符 \0。但是当循环结束时,p 指向了字符串的结束符位置,即 c 数组的最后一个元素之后。
第二个 while 循环的条件 while(*p) 初始化时就错了,因为此时 p 已经指向了字符串的结束符\0,所以这个循环根本不会执行,导致没有进行任何字符的复制操作。
修正建议: 要实现字符串逆序,可以在找到字符串结束符后,不改变 p 的位置,直接开始逆序复制字符到 ch 中,并在复制时跳过结束符\0。修正后的代码示例如下:
- #include <stdio.h>
- #include <string.h>
- int main() {
- char c[99], ch[99], *p = c, *q = ch;
-
- gets(c);
-
- // 找到字符串结束符
- while (*p) p++;
- p--; // 将 p 回退到最后一个字符的位置,因为在结束符前停止了
-
- // 逆序复制,不包括结束符
- while (p >= c) {
- *q = *p;
- p--;
- q++;
- }
- *q = '\0'; // 在复制结束后给新字符串添加结束符
-
- puts(c); // 输出原字符串
- puts(ch); // 输出逆序后的字符串
-
- return 0;
- }
复制代码 |
|