sscanf未知错误
sscanf unknown error?
我的输入文件有很多行类似于:
ATOM 339 OP1 DG D 218 72.270 54.958 23.040 1.00 27.52 O
我想从每一行中提取三个坐标:72.270 54.958 23.040
。我将每一行都存储为字符串,并使用以下内容提取坐标:
sscanf(protein[j].c_str(),"%s %s %s %s %s %s %f %f %f",useless1,useless2,useless3,useless4,useless5,useless6,&xCord,&yCord,&zCord);
这里所有的字符串名称都是无用的。这会给许多警告和程序崩溃:
warning: format '%s' expects type 'char*', but argument 6 has type 'int'.
warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will abort at runtime.
问题出在哪里?
如果sscan((的输入char数组有多个空格而不是只有一个空格,它还会崩溃吗?(为了消除这个错误的可能性,我删除了输入文件中的多个空格。(
编辑:我先检查了它们是int的可能性。(我不是一个大傻瓜。(这是初始代码:
string str,useless1,useless2,useless3,useless4,useless5,useless6,useless7,useless8,useless9;
问题出在哪里?
编译器刚刚告诉你它是什么。
格式
'%s'
需要类型'char *'
,但参数6具有类型'int'
。
因此字符串中的第6个格式说明符告诉scanf()
期望char *
,但您传递的是int
。
无法通过
'...'
传递非POD类型'struct std::string'
的对象
这意味着C++对象(更准确地说,不是普通旧数据类型的变量(不能传递给变元函数。而你正试图做到这一点。它甚至警告你它将崩溃
其他评论:
-
在C++中,很少建议使用C函数。为了获得更好的风格,您通常应该使用
std::cin
等。 -
然而,如果您尽管有以上所有内容,但仍坚持使用C函数,则就别管糟糕的
scanf()
了它不会做你认为它会做的事。使用fgets()
获取一行用户输入,并使用std::stringstream
或借助某些<cstring>
或<string.h>
函数对其进行解析。
错误告诉您参数6(即useless6
(是int而不是char *
。
此参考解释了为什么不能将Non-POD传递给可变函数
相关文章:
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 未知的 GCC 链接器错误,但已成功构建
- 为什么我得到以下代码地址清理器:未知地址错误的SEGV
- 双链表的擦除值函数,未知错误
- VS2019:资源文件错误:中性(默认)(未知子语言:0x8)
- 线程 std::调用未知类型,无法专门化函数错误
- 获取未知分段错误"(地址)在 std::__cxx11::basic_string<char, std::char_traits<char>,..., std::分配器<cha
- Qmake 错误:QT: 图表中的未知模块
- 在 Mac OS x 中制造期间出现错误未知类型名称"constexpr"
- 如何修复QFile打开错误(未知错误),即使文件存在
- 变量错误:未知类型名称
- 如何修复错误:未知的类型名称"namespace"
- gethostbyaddr 错误未知主机
- C++流错误未知
- Opencv 3.0 features2d.hpp错误:未知的AlgorithmInfo
- 项目错误:未知模块(s)在QT: qml快速
- 错误:未知模块(s)在QT: qml快速QT Creator
- QWebView的Android目标Qt5.3在windows pc上,错误:未知模块(s)在QT: webkitwid
- STL向量错误:未知类型名称