sscanf获取剩余字符串的值

时间:2016-01-30 12:50:28

标签: c arrays string char scanf

我有一个看起来像这样的字符串:

def foo(L1,L2):
    res=[]
    for lst in L1:
        if lst in L2:
            res.append(lst)
    return res

我试图获得HELLO,200和剩下的字符串。不幸的是,该字符串可能包含"HELLO 200 Now some random text\n now more text\t\t" \n,因此我无法使用\t

我尝试了以下方法:

%[^\n\t]

之后变量是:

char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
sscanf (str, "%s %d %[^\0]", message, &status, response);

有没有办法在没有strtok的情况下做到这一点?

2 个答案:

答案 0 :(得分:6)

您可以将扫描集用于unsigned char类型的整个范围:

char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
*response = '\0';
sscanf(str, "%s %d %[\001-\377]", message, &status, response);

另外,您应该始终检查sscanf的返回值。如果数字后面只有空格,则第三个说明符将不匹配任何内容,sscanf将返回2,保持response不变。

答案 1 :(得分:6)

%n说明符将捕获扫描中使用的字符数。这应该得到扫描第一个值然后从该索引strcpy使用的字符数。

int used;
sscanf (str, "%s %d %n", message, &status, &used);
strcpy ( response, &str[used]);