c - 尝试使用 fgets 读取两行。为什么它只读第一行?

标签 c fgets

我尝试使用 fgets 读取两行,但只读取了第一行,然后返回了一个段错误。我不确定我需要更改什么才能在第二行中读取它。任何帮助将不胜感激!

int main(void)
{
  char str[100];
  char *word;

  //First Line                                                                                        
  fgets(str, 100, stdin);
  printf("%s", str);

  word = strtok(str," ");
  printf("%s\n", word);

  while(word != NULL)
    {
      word = strtok(NULL," ");
      printf("%s\n", word);
  }

  //Second Line                                                                                       
  fgets(str, 100, stdin);
  printf("%s", str);

  word = strtok(str," ");
  printf("%s\n", word);

  while(word != NULL)
    {
      word = strtok(NULL," ");
      printf("%s\n", word);
    }

  return 0;
}

最佳答案

您在代码的两部分中弄错了函数调用的顺序;您在调用 strtok() 之后调用 printf() 而未检查 NULL。修复如下:

int main(void)
{
    char str[100];
    char *word;

    //First Line                                                                                        
    fgets(str, 100, stdin);
    printf("Printing entire string: %s\n", str);

    word = strtok(str, " ");
    printf("Printing tokens:\n");

    while (word != NULL)
    {
        printf("%s\n", word);
        word = strtok(NULL, " ");
    }

    //Second Line                                                                                       
    fgets(str, 100, stdin);
    printf("Printing entire string: %s\n", str);

    word = strtok(str, " ");
    printf("Printing tokens:\n");

    while (word != NULL)
    {
        printf("%s\n", word);
        word = strtok(NULL, " ");
    }
    return 0;
}

关于c - 尝试使用 fgets 读取两行。为什么它只读第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49480175/

相关文章:

c - 问题初始化结构

c - 程序异常终止 Turbo C

c - 如何生成不同整数的数组

C——scanf 或 fgets 似乎都没有执行

c - C 中的 strcat() 和 fgets() 不起作用

c - 读取C中具有特定结构的文件

c++ - 什么是 __aeabi_unwind_cpp_pr1' 以及如何避免它?

c - 在 Mac OS X 上将 GNU 科学库链接到 R

c - fgets 有好的替代品吗?

php - Paypal IPN 脚本,feof 和 fgets 问题