c - 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
解决方案
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;
}
推荐阅读
- php - Laravel API:邮递员登录请求返回 HTML 页面
- c++ - 我希望我的代码重复 3 次,但循环没有结束。有谁知道我该如何解决这个问题?
- matlab - 为什么频率不对?
- arrays - 将数组对象转换为单个数组
- database - 如何在 PDF Flutter 中使用网络图像
- javascript - 如何使用 grunt 创建缩小的 js 文件?
- php - 在 Laravel 中获取整个对象数据而不是 id
- c - c=a,b 和 c=(a,b) 有什么区别?
- c# - Asp.Net Core 3.1 MVC 运行程序时只运行一次查询?
- javascript - 如何在JS中调用一个iframe,使地址栏保持原来的url