Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 经过一半的程序,它变成了一个回文_C - Fatal编程技术网

C 经过一半的程序,它变成了一个回文

C 经过一半的程序,它变成了一个回文,c,C,我自己做了strev函数。编译时,它表示func xstrrev()中的代码无效。我还想知道,在为作业制作内置函数副本时,我们可以在其中使用内置函数(其他)吗?因为我在其中使用了strlen() #包括 #包括 #包括 void-xstrrev(char-str[]); 真空总管(真空) { char-str[30]; printf(“输入字符串:”); 获取(str); xstrrev(str); printf(“\n%s”,str); getch(); } void xstrrev(char

我自己做了strev函数。编译时,它表示func xstrrev()中的代码无效。我还想知道,在为作业制作内置函数副本时,我们可以在其中使用内置函数(其他)吗?因为我在其中使用了strlen()

#包括
#包括
#包括
void-xstrrev(char-str[]);
真空总管(真空)
{
char-str[30];
printf(“输入字符串:”);
获取(str);
xstrrev(str);
printf(“\n%s”,str);
getch();
}
void xstrrev(char str[])
{
int i,x;
x=strlen(str);
对于(i=0;i++)
{
如果(str[i]='\0')
{
打破
}
str[x-i]=str[i];
}
}

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


至于你的第二个问题,这不是一个合适的论坛,只有你的老师才能知道什么是允许的,什么是不允许的。然而,实现strlen只需要两行代码。

听听编译器的警告——希望有一条关于这个问题的警告。我得到以下信息:

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

C:\TEMP\test.c(20) : warning C4553: '==' : operator has no effect; did you intend '='?
GCC版本3.4.5,不幸的是,它似乎需要某种-W选项(例如-Wall)集:


它实际上并没有逆转。那么,怎么了?您可以告诉我们。假设您解决了
=
问题,您的代码会在读取字符串之前删除空终止符并覆盖字符串的后半部分…您应该为您的问题创建一个新问题,该问题在您解决“无效”问题后显示。现在,第一个问题中的问题/评论与你的新问题没有关系。要回答你的新问题,请思考在你完成了字符串的一半之后发生了什么。您已经用上半部分的字符覆盖了字符串的下半部分(因此您丢失了原来的数据)。您需要考虑如何在进行过程中交换字符,而不仅仅是覆盖字符。你需要考虑什么时候停止交换字符(或者你可能会把字符交换回原来的位置)将在循环的第一次迭代中丢弃“\0”终止符。您还需要注意正在访问的索引。请记住,
str[strlen(str)]
是'\0'终止符字符。另外,请记住C中的字符串以null结尾。因此,如果反转字符串,则不希望新字符串以null开头。如果我们调用空'\0',您将得到:
'a''b''c'\0'
应该变成
'c''b''a'\0'
,而不是
'\0''c''b''a'
。我不太愿意这么说,因为这可能是作业的一大部分。这是作为一个程序员,你必须考虑的一件小事。并非所有编译的东西都是正确的。@fahad:这是编译器的输出。如果使用IDE,它应该显示在生成输出窗口中,如果从命令行编译,它将显示在控制台窗口中。不同版本的编译器可能需要设置特定的开关或选项,以获取有关此特定问题的警告。让我们知道您正在使用哪些工具进行编译,我们可以为您提供更准确的详细信息,说明您需要执行哪些操作才能获得这些诊断。
C:\TEMP\test.c(20) : warning C4553: '==' : operator has no effect; did you intend '='?
C:\TEMP\test.c: In function `xstrrev':
C:\TEMP\test.c:20: warning: statement with no effect