我有字符串(45个字节):
String1 String2000000000001234
我需要从这个字符串中获取三个变量:
char * var1="String1";
char * var2="String2";
int var3=1234;
这里有3个固定长度的部分(15个字节)。我需要将所有部分保存到变量中,而不使用字符串空格,并且不对整数赋予零。
scanf()有可能吗?我怎么能这样做?
答案 0 :(得分:4)
sscanf不可能。首先,你需要传递一个char 数组(如果你使用_s变种那么大小),而不仅仅是一个char指针(即它需要有与之关联的内存)。其次,sscanf中的字符串以空格终止,而String2和0000之间没有字符串。为此格式编写自定义解析器。
答案 1 :(得分:3)
根据this,您的问题应通过以下格式解决:
%*[^a-zA-Z]%s%*[^a-zA-Z]%[^0]s%*[^1-9]%d
说明
%* [^ a-zA-Z] - 跳过(不存储)直到按字母顺序排列,即跳过前导空格
%s - 读取第一个字符串直到空格
%* [^ a-zA-Z] - 跳过尾随空格直到下一个字符串
%[^ 0] s - 读取字符串util zeros
%* [^ 1-9] -skip直到非零数字
%d - 最后,读取数字
答案 2 :(得分:0)
最简单的可能是:
char var1_buffer[31] = "", var2_buffer[31] = "";
sscanf(string+30, "%d", &var3);
string[30] = '\0';
sscanf(string, "%s%s", var1_buffer, var2_buffer);
var1 = strdup(var1_buffer);
var2 = strdup(var2_buffer);
需要能够写入输入字符串。如果那是不可能的,你可以用第3行和第4行替换:
int p1 = 0;
sscanf(string, "%30s %n%30s", var1_buffer, &p1, var2_buffer);
if (p1 > 30)
p1 = 30;
var2_buffer[30-p1] = '\0';
在任何一种情况下,您都应该添加对sscanf返回值的检查,以确保输入字符串格式正确。