我编写了一个C程序来使用指针反转字符串,我面临的问题是我不使用循环就无法接受字符串。 都不是完整的字符串打印,而是仅打印单个字符。
我尝试使用循环访问字符串,但效果很好,但我不打算这样做。
#include<stdio.h>
int main()
{
char s[10];
char temp;
scanf("%s", s);
char *start=s;
char *end=s;
while(*end!='\0')
{
end++;
}
end--;
while(start<end)
{
temp=*start;
*start=*end;
*end=temp;
}
printf("%s", s);
}
答案 0 :(得分:2)
问题在于,在第二个循环中,您永远不会减少end
指针,也不会增加start
指针。
尝试
while (start < end)
{
temp = *start;
*start++ = *end;
*end-- = temp;
}
另一方面,如果用户使用您的方法未输入任何内容,则可能会遇到问题
while (*end != '\0')
{
end++;
}
end--; // UB when strlen(s) = 0
切换到
if (*end != 0)
{
end += strlen(s) - 1;
}
此外,最好使用scanf
来限制字符串的长度,以避免缓冲区溢出:
scanf("%9s", s);