首页 > 解决方案 > sscanf 读取到字符串末尾

问题描述

我需要将字符串分成两部分,字符串的第一列是第一部分,字符串的其余部分是第二部分。第一部分需要存储在first_str,第二部分需要存储在rest_str.

我用来实现结果,当不包含任何文字sscanf时,我设法通过以下示例获得所需的输出。 sentence[]\n

简而言之,我需要知道格式说明符直到输入字符串的结尾。直到现在我能够让它工作直到\n被看到,但不能再使用它了。有人可以帮助阅读直到字符串结束而不是直到\n看到。

这是缩小的示例:

#include <stdio.h>

int main ()
{
  char sentence []="abc@xyz.com foo bar foobar\nhey there";
  char first_str [200];
  char rest_str [200];

  //sscanf (sentence,"%s %99[^\0]",first_str,rest_str);
  sscanf (sentence,"%s %99[^\n]",first_str,rest_str);

  printf ("first column is %s\nevertyhing else is %s\n",first_str,rest_str);

  return 0;
}

期望的结果:

first column is abc@xyz.com
evertyhing else is foo bar foobar\nhey there

或者

first column is abc@xyz.com
evertyhing else is foo bar foobar
hey there

标签: cscanf

解决方案


sscanf支持%n格式说明符返回消耗的字符数。您可以使用它来确定前缀sscanf消耗了多长时间。

以下代码设置rest_str为指向“字符串的其余部分”:

int main ()
{
  char sentence []="abc@xyz.com foo bar foobar\nhey there";
  char first_str [200];
  char *rest_str;

  int n = 0;
  sscanf (sentence,"%s %n",first_str,&n);
  rest_str = sentence + n;

  printf ("first column is %s\nevertyhing else is %s\n",first_str,rest_str);

  return 0;
}

推荐阅读