Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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 验证字符串S是否向后等于字符串T_C_Arrays_String - Fatal编程技术网

C 验证字符串S是否向后等于字符串T

C 验证字符串S是否向后等于字符串T,c,arrays,string,C,Arrays,String,例如,如果我首先输入testing,然后向后输入同一个单词,即gnitset,它应该打印出该语句为true。我不确定我的程序出了什么问题,因为我刚开始使用strev函数和字符串 #include <stdio.h> int main() { char wordS[101], wordT[101]; scanf("%s", wordS); scanf("%s", wordT); if (wordS == strrev(wordT)){ printf(

例如,如果我首先输入
testing
,然后向后输入同一个单词,即
gnitset
,它应该打印出该语句为true。我不确定我的程序出了什么问题,因为我刚开始使用strev函数和字符串

#include <stdio.h>

int main()
{
   char wordS[101], wordT[101];

   scanf("%s", wordS);
   scanf("%s", wordT);

  if (wordS == strrev(wordT)){
    printf("true");
}   
  else printf("false");

return 0;
}
#包括
int main()
{
char-wordS[101],wordT[101];
scanf(“%s”,单词);
scanf(“%s”,wordT);
if(wordS==strev(wordT)){
printf(“真实”);
}   
else printf(“假”);
返回0;
}
wordS==strev(wordT)
比较指针,但不比较字符串。 改用strcmp

if (strcmp (wordS ,strrev(wordT)) == 0)

或者更好的是,
strncmp()
——很好地养成了尽早考虑边界检查的习惯……谢谢。我现在要查找这两个参数之间的差异。
strcmp()
如果两个参数都有一个终止的
“\0”
,则不会运行超过数组边界。
strcmp()
的真正问题在于,如果终止的
'\0'
被取消,并且
strncmp()
在这种情况下并不总是有帮助(例如,如果调用方提供的上限超过了缺少终止符的位置)。@landru27不同意
strncmp()
更好。更好的习惯是使用适合工作的工具。在这种情况下,需要对用户输入设置宽度限制:
scanf(“%s”…
-->
scanf(“%100s”…
)或
fgets()
@Peter我明白你的意思;在任何情况下都必须小心;但确保(比如)某些外部、用户提供的字符串数据实际上以null结尾的方法是,将其读入一个缓冲区,您知道该缓冲区足够大,并且已被清除,或者有一个字节剩余,用于另一个非用户提供的null结尾;您不会逃出ne只需使用
strcmp()
(及其近亲)就可以了解和观察边界;左手需要知道右手以任何方式在做什么;您可以在
strcmp()
…上强制进行边界检查,也可以使用
strncmp()
这不会让你忽略它。问题在于比较指针,而不是指针指向什么。另外
strev()
-与提供它的供应商的一些说法相反-不是标准C的一部分。