查找用户输入的字符串内的子串

时间:2016-02-11 01:59:25

标签: c string

我试图写下一个子字符串查找器,其作用类似于聊天中的家禽语言拦截器。出于某种原因,每次运行代码时代码都会崩溃。

int main ()
{
    char *sent;
    char *key1 = "WORD";
    printf("Input: \n");
    sent = scanf("%d");
    if(strstr(sent, key1) != NULL) {
        printf("YES");
    }
}  

1 个答案:

答案 0 :(得分:0)

您没有为sent分配内存。当您编写char *sent时,指针指向未知地址处的某些未初始化的内存。当你读入它时,它必须有足够的空间来容纳输入 - scanf不会为你分配内存。这是修订后的代码

int main()
{
    char sent[16];  /* alloced 16 chars, including '\0' */
    char *key1 = "WORD";

    printf("Input: \n");
    scanf("%s", sent);

    if (strstr(sent, key1) != NULL)
        printf("YES");

    return 0;
}

您还使用了scanf错误。 %d说明符读取十进制整数,而不是字符串。对于字符串,您需要%s。并且scanf不会返回读取值。它返回一个失败/成功的信号。你需要将地址传递给变量参数列表。

最后一点:如果你正在阅读句子,scanf是不够的。您需要fgets

char buf[80];
fgets(buf, 80, stdin);
然后

buf将包含标准输入中的前80个字符。