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的一部分。