-1

我想从文件中读取数据行。我尝试的一切都不起作用。

以下是数据的示例:

“< x = 128 y = 480 img = img/A.png 类型 = 合格 >”

现在我想从这个字符串中读取 4 个值。

char img[256];
char ObjectType[256];
sscanf_s(lines[i].c_str(),"< x = %i y = %i img = %s type = %s >",&x,&y,img,ObjectType);

但每次我得到Memoryleaks。

你有想法吗?

编辑:

我用我的 opionion unclean 方法解决了我的问题。我使用了一个字符串流:

            istringstream iss(lines[i]);
            iss >> temp >> temp >> temp >>
            x >> temp >> temp >>
            y >> temp >> temp >>
            img >> temp >> temp >> 
            ObjectType;
4

1 回答 1

1

请改用以下行:

sscanf_s(lines[i].c_str(),"< x = %i y = %i img = %s type = %s >",&x,&y,img, _countof(img),ObjectType,_countof(ObjectType));

来自sscanf_s 的 msdn 文档

使用类型字段字符 c、C、s、S 和 [ 时需要缓冲区大小参数。必须在每个需要它的缓冲区之后作为附加参数提供以字符为单位的缓冲区大小。

您缺少缓冲区大小参数,因此它试图将未知数量的字节写入img,然后尝试将您想要写入的内容写入ObjectType未定义的内存位置,因此您遇到了异常。

于 2013-10-23T16:24:07.750 回答