我有一个真正古老的punch-card format和一个C ++代码,该代码使用sscanf
如下读取,
sscanf(longstr1,"%2d %5ld %1c %10s %2d %12lf %11lf %7lf %2d %7lf %2d %2d %6ld ",
&cardnumb,&satrec.satnum,&classification, intldesg, &satrec.epochyr,
&satrec.epochdays,&satrec.ndot, &satrec.nddot, &nexp, &satrec.bstar,
&ibexp, &numb, &elnum );
这里,字符串longstr1
的前两个字符包含读入int
的{{1}},接下来的五个字符包含读入cardnum
的{{1}},和以此类推。 (一定年龄的人会将其识别为Hollerith格式。)字符串int
中字符的位置永远不变。
这很好用,但我必须使其在Linux上的satrec.satnum
和Windows上的Visual Studio C ++(2017)上都可以使用。 VS抱怨longstr1
是不安全的(我想是的),建议使用Microsoft独有的功能gcc
替换它。我需要一个使VS满意的替代品,但也可以在Linux上使用sscanf
进行编译。
是否有一些安全的,也许是简单的方法来完成此任务?
答案 0 :(得分:-1)
如果在Windows上定义_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
,则每次编写sscanf时都会使用sscanf_s。这意味着在Linux上,代码保持原样运行,在Windows上,该功能会自动为您替换为安全版本,但不再生成任何警告,因此两个平台都应该满意。有关更多信息,请参见Microsoft文档网站上的secure template overloads。