大家晚安,我正在尝试解析一个.h文件,所以我可以让一个小的控制台前端来改变它的值,但当我尝试使用strncmp时,从文件中读取一个字符串,并在代码中定义一个字符串与文件字符串进行比较我从编译器中得到一个我无法解决的奇怪错误,这是我的源代码:
//Test to basic file operations
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
int main (void){
string line;
ifstream myfile("PIDconfig.h");
if(myfile.is_open()){ //if file is open
while(myfile.good()){
getline(myfile, line);
if(strncmp(line, "static float", 12) == 0){
cout << line << endl;
}
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
我得到的错误:
tiago@tiago-laptop:~$ g++ file.cpp
file.cpp: In function ‘int main()’:
file.cpp:17: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int strncmp(const char*, const char*, size_t)’
如果有人可以帮助我,我会很高兴,我已经搜索过StackOverflow但是我没有找到任何有相同问题的人,几乎所有strncmp问题都使用数组来存储他们的字符串,就我而言,没有人是使用它和文件I / O时遇到问题。
答案 0 :(得分:3)
std::string
重载operator==
。您只需使用std::string
比较两个==
对象。
答案 1 :(得分:1)
if(strncmp(line.c_str(), "static float", 12) == 0){
应该有效
答案 2 :(得分:1)
问题是您从文件中读取数据作为C ++字符串,而strncmp函数适用于C样式字符串。要解决此问题,您可以使用.c_str()从C ++字符串中提取原始C样式字符串,也可以使用C ++字符串的.compare函数:
line.compare(0, 12, "static float")
答案 3 :(得分:1)
问题是strncmp()函数重载为strncmp(const char *,const char *,int)
但你想通过strncmp(string,string,size_t)
来调用它您必须使用
将字符串转换为const char *c_str()
例如
string str =“Hello”; char * arr = str.c_str()。
你明白了吗?