在程序的一半之后,它变成了回文

时间:2010-07-09 19:03:31

标签: c

我自己制作了strrev功能。虽然编译它说func xstrrev()中的代码没有效果。我还想知道,在为分配制作内置函数的副本时,我们可以使用内置函数(其他)吗?因为我在其中使用了strlen()。

#include<stdio.h>
#include<conio.h>
#include<string.h>
void xstrrev(char str[]);
void main(void)
{
 char str[30];
 printf("Enter a string:");
 gets(str);
 xstrrev(str);
 printf("\n%s",str);
 getch();
}
void xstrrev(char str[])
{
int i,x;
x=strlen(str);
for(i=0;;i++)
 {

  if(str[i]=='\0')
  {
   break;
  }

str[x-i]=str[i];

 }
}

2 个答案:

答案 0 :(得分:17)

您使用了比较运算符==而不是赋值运算符=。 所以编译器是正确的:xstrrev只执行比较,其结果被忽略,而不是赋值。

至于你的第二个问题,这不是一个正确的论坛,只有你的老师能说出什么是允许的,什么不是。但是,实现strlen恰好是两行代码。

答案 1 :(得分:2)

听取编译器的警告 - 希望有一个关于这个问题。我得到了以下内容:

VS 2010(MSVC 10),没有关于警告级别的特定选项:

C:\TEMP\test.c(20) : warning C4553: '==' : operator has no effect; did you intend '='?

GCC版本3.4.5,遗憾的是似乎需要某种-W选项(例如-Wall)集:

C:\TEMP\test.c: In function `xstrrev':
C:\TEMP\test.c:20: warning: statement with no effect