2011-01-31 2 views
2

Спокойной ночи для всех, я пытаюсь разобрать файл .h, чтобы у меня была небольшая консоль для изменения ее значений, но когда я пытаюсь использовать strncmp со строкой, считанной из файл и строка, определенный в коде для сравнения с файловой строкой я получаю странную ошибку от компилятора, что я не могу решить, вот мой исходный код:Использование 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; 
    } 

и ошибка, что я получаю:

[email protected]:~$ 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, но я сделал nt нашел кого-нибудь с той же проблемой, почти все проблемы strncmp используют массивы для хранения своих строк, и насколько я понял, никто не имел проблемы с этим и файлами ввода-вывода.

+0

Почему бы вам не использовать правильный инструмент для работы. Я имею в виду язык сценариев с регулярным выражением или, возможно, даже простой старый grep? Расходы на курсы. –

ответ

1

проблема заключается в том, что функция strncmp() перегружается для strncmp (сопзЬ сЬаг *, Const символ *, Int)

но вы хотите назвать его strncmp (строка, строка, size_t)

вы должны преобразовать строку в константные символ * с

c_str()

, например

строка Str = "Привет"; char * arr = str.c_str().

вы его получили?

3

std::string перегрузки operator==. Вы можете просто сравнить два объекта std::string, используя ==.

Также your input loop is incorrect.

1
if(strncmp(line.c_str(), "static float", 12) == 0){ 

должен работать

+0

Да, это действительно работает! – TiagoAngelo

1

Проблема заключается в том, что вы читаете данные из файла в виде строки C++, а функция strncmp работает со строками в стиле C. Чтобы это исправить, вы можете извлечь сырую строку в стиле C из строки в C++ с использованием .c_str(), или вы можете использовать ++ .compare функции струны C:

line.compare(0, 12, "static float")