C 我应该在while循环中使用什么条件?
我的目标是将string1以相反的顺序复制到string2,但是我在第二个while循环中的条件显然不正确,如何实现while循环以继续,直到string1中的所有字母都进入string2?因为string1中的“\0”在while循环之前递减指针1之后已经通过了C 我应该在while循环中使用什么条件?,c,C,我的目标是将string1以相反的顺序复制到string2,但是我在第二个while循环中的条件显然不正确,如何实现while循环以继续,直到string1中的所有字母都进入string2?因为string1中的“\0”在while循环之前递减指针1之后已经通过了 //reversing strings.. #include <stdio.h> #include <stdlib.h> int main() { char *pointer1; char
//reversing strings..
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *pointer1;
char *pointer2;
char string1[20];
char string2[20];
pointer1 = string1; //allowing pointer to point to first letter of string1
pointer2 = string2; //allowing pointer2 to point to first alphabet of string2
printf("enter a string\n");
gets(string1);
while (*pointer1)
{pointer1++;}
pointer1--;
while(*pointer2)
{
*pointer2 = *pointer1;
pointer1--;
pointer2++;
}
*pointer2 = '\0';
printf("%s", string2);
return 0;
}
//反转字符串。。
#包括
#包括
int main()
{
字符*指针1;
字符*指针2;
charstring1[20];
charstring2[20];
pointer1=string1;//允许指针指向string1的第一个字母
pointer2=string2;//允许pointer2指向string2的第一个字母表
printf(“输入字符串”);
获取(string1);
while(*pointer1)
{pointer1++;}
指针1--;
while(*pointer2)
{
*指针2=*指针1;
指针1--;
指针2++;
}
*指针2='\0';
printf(“%s”,string2);
返回0;
}
第二个循环中的条件错误。请记住,由于您没有初始化string2
,它将包含看似随机的数据。读取该数据(就像在第二个循环的条件中一样)会导致未定义的行为
您必须记住数组会衰减为指针,因此您可以使用数组作为指针,并具有如下条件
while (pointer1 >= string1) {...}
试试这个
size_t size = strlen(string1)
while(size--)
{
*pointer2 = *pointer1;
pointer1--;
pointer2++;
}
如果人类缩进他们的代码,世界就会不同。我不明白,为什么你要在一个返回
int
while(*pointer2)
->while(pointer1>=string1)
@BLUEPIXY的方法中尝试反转字符串,但是通过使用带指针的关系运算符,你在比较指针的大小还是什么?@user3151918pointer1
指向数组string1
的最后一个元素。通过比较pointer1>=string1
,可以检查pointer1
是否指向第一个元素或第一个元素之前的元素(顺序相反)。如果它指向第一个元素,则终止循环。我知道它是错的,如果你清楚地阅读了我的问题,你就会意识到这是我首先发布问题的唯一原因--你在while语句中到底比较了什么?@haccks想解释一下为什么它是错的吗因为我很确定它给出了正确的结果。这可能被认为是坏习惯,这在我看来是有争议的,但我不认为这是错的。@luk32;我想我在这件事上错了。这会奏效的。向上投票以反对错误投票。@user3151918它正在比较两个指针(如我所说,数组衰减为指针)和循环,只要指针pointer1
大于或等于指针string1
。好的,所以大小将继续递减,只要它不等于0,循环将继续,它/我很高兴它帮助了您。别忘了读:蓝猫;为什么会这样?