문제를 해결하기 위해 레거시 코드를 살펴보고 다음과 같은 방식으로 c_str을 검사하는 것이 효과가 없다는 것을 알았습니다. 그러나 string.empty() 비교를 변경하면 작동합니다. 그래서 내 문제가 해결되지만 c_str 비교가 작동하지 않는 이유는 확실하지 않습니다. 왜 그런가?
감사합니다.
- gcc 버전 4.1.2 20080704 (Red Hat 4.1.2-46)를 사용 중입니다. c_str() == NULL이 작동하지 않습니다.
#include <iostream>
using namespace std;
int main()
{
string a="";
if (a.c_str() == NULL)
{
cout <<"char says empty"<<endl;
}
if (a.empty())
{
cout << "string says empty"<<endl;
}
}
는 출력은
.c_str()
아마로 설정 첫 번째 바이트로, 일부 메모리에 NULL이 아닌 문자열을 반환,
문자열이 내가 빈 문자열로, 추측에서
정말요? 나는 비어있는 NULL이 아니라고, NULL을 의미합니다! = "". – daniel
표준이 실제로 * null 포인터를 반환하려면 *'std :: string :: c_str()'이 필요하다고 생각합니다. –
빈 문자열과 전혀 문자열이 전혀 다른 두 가지입니다. –