我编写了此函数来反转C中的字符串,但是它不起作用。
#define MAXSIZE 30
char buffer[MAXSIZE] = "hello";
int main(void)
{
strrev(buffer);
printf("%s",buffer);
return 0;
}
void strrev(char *s)
{
char c = 0;
char *ptr = s;
while(*s)
s++;
char *f = s;
while(ptr != f);
{
c = *ptr;
*ptr = *s;
*s = c;
s--;
ptr++;
}
}
我找不到该代码有什么问题
答案 0 :(得分:1)
s--;
之后添加while(*s) s++;
。这是因为* s在循环后将为'\ 0'。答案 1 :(得分:1)
您的功能很少出现问题。
1)while(*s)
s++;
移动指针s
指向\0
。因此,您需要通过执行\0
f=s-1;
之前的字符
2)删除while(ptr != f)
末尾的分号,并且如果buffer
中还有一个多余的字符,则条件不起作用,因此将其更改为while(ptr < f)
3)您应将*ptr = *s; *s = c; s--;
替换为*ptr = *f; *f = c; f--;
答案 2 :(得分:1)
您的程序中有很多错误:-
function prototype
。while(*s)
应该是while (*(s+1) != '\0')
,直到您到达最后一个字符为止。while(ptr != f);
应该是while (ptr <= s)
,您不需要;
,只需要将字符交换到ptr <= s
。修改后的代码:-
#include <stdio.h>
#define MAXSIZE 30
char buffer[MAXSIZE] = "hello";
void strrev(char *s); // function prototype
int main(void)
{
strrev(buffer);
printf("%s", buffer);
return 0;
}
void strrev(char *s)
{
char c = 0;
char *ptr = s;
while (*(s + 1) != '\0')
{
s++;
}
char *f = s;
while (ptr <= s)
{
c = *ptr;
*ptr = *s;
*s = c;
s--;
ptr++;
}
}
输出 (gcc):-
olleh