【问题标题】:Finding substrings inside strings inputted by the user在用户输入的字符串中查找子字符串
【发布时间】:2016-02-11 10:08:01
【问题描述】:

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

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

【问题讨论】:

  • sent = scanf("%d"); 你从哪里得到这个?是什么让您认为它是正确的?

标签: c string


【解决方案1】:

您没有为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 个字符。

【讨论】:

  • 谢谢!我不能对你的帖子投赞成票,所以我就离开了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 2012-09-07
  • 2021-08-13
相关资源
最近更新 更多