[완료] C++ 스트링 관련

bluesolip의 이미지

안녕하세요.

text 파일에서 문자열을 읽어와 특정 문자열을 찾으려고 합니다.

- test.txt 내용
aaaaa
bbbbb
ccccc

- 코드 일부
char buffer[128];
ifstream testtxt ("test.txt");
while (! testtxt.eof() )
{
testtxt.getline (buffer,128);
strcmp(buffer, "bbbbb")
{
printf("find");
}
}

파일에서 정상적으로 읽어오는데 "bbbbb" 문자열을 못찾습니다.
그래서 길이를 비교해보니 파일에서 읽은 값은 길이가 6이고 "bbbbb"는 5 라 다르다고 판단한 것이었습니다.
파일에서 한라인을 읽어들일때 NULL값이나 줄바꿈 없이 스트링 "bbbbb"만 읽어오려면 어떻게 해야 하나요?
도움 부탁드립니다.

익명 사용자의 이미지

strstr or strncmp

bluesolip의 이미지

댓글 감사합니다.

text에서 한라인을 읽어와서 카피하면 \n 이 붙잖아요?
이걸 없애고 복사하는 방법을 원해요. for loof로 끝에 있는 0x0d를 없애도 되겠지만 깔끔하게 코딩하는 방법이 있나 해서 여쭤봐요.

익명 사용자의 이미지

*strstr(s,"\n") = \0;

bluesolip의 이미지

ㅎㅎ 간단한 방법이 있었네요.

감사합니다.

qiiiiiiiip의 이미지

std::fstream::getline 함수는 별도로 구분자가 주어지지 않은 경우

\n을 구분자로 간주해서 라인을 읽습니다.

즉 \n이 읽히지 않습니다.

두번째로 fgets 처럼 \n을 읽는다고 하더라도, 이 코드는

예를 들어 한 라인이 128 byte보다 긴 경우 등,

strstr이 NULL을 반환하는 경우 런타임 오류가 날 수도 있겠습니다..

좀 길어지더라도 안전하게 코딩하는게 좋아보이네요..

아래분 말씀처럼 std::string을 쓰는 것 추천.

jick의 이미지

이왕 C++ stream을 쓰실 거면 C의 문자열보다 C++에서 제공하는 std::string을 쓰는 게 훨씬 간편하고 메모리 관리도 쉽고 좋습니다.