파일에서 한 줄을 읽었으며 int로 변환하려고합니다. 어떤 이유로 atoi()
(문자열을 정수로 변환)은 인수로 std::string
을 허용하지 않습니다 (문자열 대 C 문자열과 문자 배열의 문제 일 수 있습니까?) -이 텍스트 파일을 구문 분석 할 수 있도록 atoi()
을 올바르게 작동 시키려면 어떻게해야합니까? ? (그것으로부터 많은 int를 끌어낼 것입니다).문자열에서 atoi를 가져올 수 없습니다 (문자열 대 C 문자열?)
코드 :
int main()
{
string line;
// string filename = "data.txt";
// ifstream file(filename)
ifstream file("data.txt");
while (file.good())
{
getline(file, line);
int columns = atoi(line);
}
file.close();
cout << "Done" << endl;
}
라인 원인이 문제는 다음과 같습니다
오류 제공int columns = atoi(line);
:
error: cannot convert
'std::string'
to'const char*'
for argument '1' to 'intatop(const char*)
'
을 어떻게 제대로 atoi 함수 작업을합니까?
편집 : 감사합니다. 작동합니다! 새로운 코드 : 또한
int main()
{
string line;
//string filename = "data.txt";
//ifstream file (filename)
ifstream file ("data.txt");
while (getline (file,line))
{
cout << line << endl;
int columns = atoi(line.c_str());
cout << "columns: " << columns << endl;
columns++;
columns++;
cout << "columns after adding: " << columns << endl;
}
file.close();
cout << "Done" << endl;
}
궁금 이유 = "data.txt로" 문자열 이름; ifstream 파일 (파일 이름) 실패,하지만
ifstream file("data.txt");
작품? 는 (나는 결국 명령 줄을 형성 파일 이름을 읽을 수 있으므로하지 문자열 리터럴 확인해야합니다)
atoi를 절대로 사용하지 마십시오. 오류를보고 할 수 없습니다. std :: strtoi 또는 std :: stoi를 사용하십시오. – PlasmaHH
@PlasmaHH, 맞습니다.하지만 'strtol'을 의미합니다. 'boost :: lexical_cast'도 옵션이 될 수 있습니다. IIRC 어딘가에 * 이것에 대한 질문이 * 있습니다. – chris
atoi보고 오류가 도움이되지 않는 것으로 보입니다. 문제가 발생하더라도 작업을 시도합니다. 예외를 던지고 종료하는 것이 좋습니다. www.cplusplus.com에서 atoi는 "No-throw 보장 :이 함수는 결코 예외를 throw하지 않기 때문에 좋다"라는 것을 알게되었습니다. – user2333388