尝试写入“单词”中的每个字母出现在“s”中时返回1的函数。 例如: 指向字符串C的指针
containsLetters1( “this_is_a_long_string”, “气体”)返回1
containsLetters1( “this_is_a_longstring”, “暖气”)返回0
containsLetters1( “你好”, “p”)返回0
不能明白为什么它不正确的:
#include <stdio.h>
#include <string.h>
#define MAX_STRING 100
int containsLetters1(char *s, char *word)
{
int j,i, flag;
long len;
len=strlen(word);
for (i=0; i<=len; i++) {
flag=0;
for (j=0; j<MAX_STRING; j++) {
if (word==s) {
flag=1;
word++;
s++;
break;
}
s++;
}
if (flag==0) {
break;
}
}
return flag;
}
int main() {
char string1[MAX_STRING] , string2[MAX_STRING] ;
printf("Enter 2 strings for containsLetters1\n");
scanf ("%s %s", string1, string2);
printf("Return value from containsLetters1 is: %d\n",containsLetters1(string1,string2));
return 0;
你的'scanf'调用是不安全的 - 我可以输入更长的字符串,并且打碎你的堆栈 – Nazar554
内部循环应该超过's'的有效长度,而不是MAX_STRING。你也失去了's'(和'word')的原始值,所以你不能再从头开始匹配'word'中的第二个字符。 –
您正在比较指针,而不是它们指向开始的值。没有正确验证字符串长度时会出现更多错误,当遇到不匹配时会将指针向后重置,等等。 – EkriirkE