Использование Strncmp со строкой из файла - PullRequest
2 голосов
/ 31 января 2011

Всем доброй ночи, я пытаюсь разобрать файл .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 используют массивы для хранения своих строк, и, насколько я понял, никто возникли проблемы с его использованием и файловым вводом / выводом.

Ответы [ 4 ]

3 голосов
/ 31 января 2011

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

Также, Ваш входной цикл неверен.

1 голос
/ 01 февраля 2011

проблема в том, что функция strncmp () перегружена для strncmp (const char *, const char *, int)

но вы хотите вызвать его с помощью strncmp (string, string, size_t)

Вы должны преобразовать строку в const char * с помощью

c_str ()

например

string str = "Hello"; char * arr = str.c_str ().

Вы поняли?

1 голос
/ 31 января 2011

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

line.compare(0, 12, "static float")
1 голос
/ 31 января 2011
if(strncmp(line.c_str(), "static float", 12) == 0){

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

...