我必须用以下格式分割(使用sscanf是或是)一个字符*:
First_Line1: This is the 1st line
要么
First_Line: This-is_the_first-line123
我只需要将内容放在2个变量中,其中一个包含在"之前的内容:"和#34;之后的另一个内容:"。
请注意":"之前和之后可能有数字和特殊字符。
我到目前为止尝试过的一些例子是:
sscanf(cab, "%[a-zA-Z]%*[:] %[a-zA-Z]", &cab.name, &cab.value);
sscanf(cab, "%s %*[:] %s", &cab.name, &cab.value);
还有很多我无法记住的事情。 (实际上我并不关心特殊字符,只想把它分成两部分)
我无法使用任何格式参数使其正常工作。请帮忙。感谢。
答案 0 :(得分:1)
我之前从未使用过这种格式,但我很快就解决了这个问题:
#include <stdio.h>
int main(void)
{
char inp [] = "one two: three four";
char str1[100] = "";
char sep = ' ';
char str2[100] = "";
if (sscanf(inp, "%[^:]%c %[^\0]", str1, &sep, str2) != 3)
return 1;
printf("'%s'\n", str1);
printf("'%s'\n", str2);
return 0;
}
程序输出(添加'
以清楚地显示字符串的范围):
'one two'
'three four'
请注意您的一个特定错误:&cab.name
等不应该有&
,因为您提供的值将是指针或衰减指针。
修改强>
正如@ user3121023所指出的(自删除后的评论),格式%[^\0]
将提前终止格式字符串。所以我建议在输入数据中使用不出现的字符。由于从未找到过,所以输入的其余部分都将被采用。
if (sscanf(inp, "%[^:]%c %[^\7]", str1, &sep, str2) != 3)
return 1;