【问题标题】:sscanf writing to variable issuesscanf 写入变量问题
【发布时间】:2012-07-11 12:47:10
【问题描述】:

我有这样的代码

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 内的制表符空间也与三个 %d 末尾的一些奇怪字符一起插入。我无法更改必须在我的变量 data 中输入的数据格式。 请帮助我,我该如何使用 sscanf 的帮助来做到这一点。谢谢提前提供任何帮助

【问题讨论】:

  • 1050%d|%d|%d 的区别是什么?必须使用sscanf() 吗?
  • 发布 sscanf() stmts。你正在使用。
  • @hmjd ya sscanf 是必须的,并且 tab 将其分隔。

标签: c++ c scanf


【解决方案1】:

以下将提供所需的行为:

#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 进行演示。

【讨论】:

  • 这两个字段不是用\t而是用空格隔开的!
  • @A.G.,请参阅 OP 在问题下方的评论,他指出 tab 将其分隔
【解决方案2】:

试试这个...

char data[]="%d|Hello world|Ticket|Offset=44|msgId=1050        %d|%d|%d";
char var1[100], var2[100];
char *szField1, *szField2;

// extract var1
szField1 = strstr(data, "  " );
memset( var1, 0, sizeof( var1 ) );
strncpy( var1, data, szField1 - data );

// extract var2
szField2 = strstr( szField1, "%" );
memset( var2, 0, sizeof( var2 ) );
strcpy( var2, szField2 );

【讨论】:

  • @Mcolorz 至少 2 个空格,否则 strstr 将停在“world|...”
猜你喜欢
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
相关资源
最近更新 更多