c语言指针
int main(){
char c,ch,*p=c,*q=ch;
gets(c);
while(*p)
p++;
while(*p)
{
*q=*p;
p--;
q++;
}
puts(c);
puts(ch);
}
逆序存放数组,输出没有结果怎么回事 while(*p)
p++; 这里p都走到尾部了,下面的while(*p)还能进去吗 wp231957 发表于 2024-7-29 12:18
while(*p)
p++; 这里p都走到尾部了,下面的while(*p)还能进去吗
你好,我修改了之后
int main()
{
char c,ch,*p=c,*q=ch;
gets(c);
while(*p)
p++;
p=p-1;
while(*p)
{
*q=*p;
q++;
p--;
}
*q='\0';
puts(ch);
}
逆序存放后还输出了一个@字符这是什么情况 本帖最后由 三体人的智子 于 2024-7-29 13:17 编辑
1203081549 发表于 2024-7-29 12:45
你好,我修改了之后
int main()
{
我在测试你程序时也出现了乱码
这里建议修改:将 puts改为printf //printf是标准的输出函数
最终代码如下(建议楼主提交代码用代码格式)
#include<stdio.h>
int main()
{
char c,ch,*p=c,*q=ch;
gets(c);
while(*p)
p++;
p=p-1;
while(*p)
{
*q=*p;
q++;
p--;
}
*q='\0';
printf(ch);
}
{:10_256:} 在第一个 while 循环中,while(*p) 的目的是找到字符串的结束符 \0。但是当循环结束时,p 指向了字符串的结束符位置,即 c 数组的最后一个元素之后。
第二个 while 循环的条件 while(*p) 初始化时就错了,因为此时 p 已经指向了字符串的结束符\0,所以这个循环根本不会执行,导致没有进行任何字符的复制操作。
修正建议: 要实现字符串逆序,可以在找到字符串结束符后,不改变 p 的位置,直接开始逆序复制字符到 ch 中,并在复制时跳过结束符\0。修正后的代码示例如下:
#include <stdio.h>
#include <string.h>
int main() {
char c, ch, *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;
}
页:
[1]