c - 如何使用 strtok() 从字符串中的 n 处打印包含字符 c 的单词?

标签 c pointers c-strings

我正在输入字符串 str 并希望打印其在位置 n 上包含输入字符 c 的所有单词(因此,如果 n = 1,则它是第一个字符)。我尝试使用 strtok() 来执行此操作,但遇到了奇怪的崩溃。有什么建议吗?

int main()
{
    char str[100]; gets(str);
    while(getchar()!='\n'); ///so that n or c don't scan a newline in them

    int n; scanf("%d",&n);
    char c; scanf("%c",&c);

    char* token = strtok(str, " ");

    while (token != NULL) {
        if(token[n-1]==c){
            printf("%s\n", token);
        }
        token = strtok(NULL, " ");
    }

    return 0;
}

我输入了以下内容:

Hi i like mint
2
i

然后程序突然崩溃,并显示以下消息:

Problem.exe has stopped working...

最佳答案

那个while循环似乎没有必要。另外,我使用了 fgets(),而不是 gets()。我将大部分声明移到了函数的开头。这段代码现在可能可以工作了。

#include <stdio.h>
#include <string.h>
int main()
{
    int n; 
    char c, str[100]; 

    fgets(str, 100, stdin);
    scanf("%d %c",&n, &c);

    char* token = strtok(str, " ");

    while (token != NULL) {
        if(token[n-1] == c) {
            printf("%s\n", token);
        }
        token = strtok(NULL, " ");
    }

    return 0;
}

这是我测试它的链接:https://ideone.com/KQkRrG

关于c - 如何使用 strtok() 从字符串中的 n 处打印包含字符 c 的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56303707/

相关文章:

c++ - 1<<25 在开放中意味着什么?

代码给出了意想不到的结果

c - 用于补偿 TCP 流套接字的示例 C 代码?

c++ - 以结构为参数的指向结构的例程指针

对字符串的 C 指针操作会产生意外的输出

c++ - C 字符串到宽 C 字符串

c++ - 有人可以解释为什么这段代码的输出是 3 而不是 4 吗?

C++ 使用多重继承与未知基类比较指针

c - 将指针元素赋值给数组中的另一个指针元素是什么意思?

c - 通过添加 0 来分割 c 字符串(段错误)