我有这样的代码

sprintf(data, "%d|Hello world|Ticket|Offset=44|msgId=1050        %d|%d|%d", r+1,header->m_msgId,header->m_sequence,header->m_offset);

其中data是大小为100的char数组,header是结构变量。

现在使用sprintf将整个数据写入数据后,我想将整个数据分成两部分,然后将其复制到两个新变量中
char var1[100],var2[100];

这可以用sscanf完成,但是我想要的是在var1中我只想要直到
%d|Hello world|Ticket|Offset=44|msgId=1050

而在var2中,我想要那一部分,即
%d|%d|%d

。一种方法是执行%[^ \ t},依此类推,但在这种情况下,var1内的值是正确的,但在var2内的制表符空间也随三个奇怪的字符一起插入了三个%di的末尾,因此不能更改必须在我的变量数据中输入的数据。
请帮助我,我该如何使用sscanf.thanks提前提供任何帮助

最佳答案

下面将提供所需的行为:

#include <stdio.h>
#include <string.h>

int main()
{
    char arr[] = "18|Hello world|Ticket|Offset=44|msgId=1050\t12|4|5";
    char var1[100];
    char var2[100];

    if (2 == sscanf(arr, "%[^\t]%s", var1, var2))
    {
        printf("var1[%s]\nvar2[%s]\n", var1, var2);
    }
    return 0;
}

参见http://ideone.com/j8am8进行演示。

关于c++ - sscanf写入变量问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11432988/

10-11 21:23
查看更多