2014-12-22 2 views
-1

저는 현재 C++로 코드를 개발하고 있으며 더 많은 "C++"이되도록 char *을 문자열로 옮깁니다.C++ 문자열 - 할당이 충돌합니다.

그런데이 값을 할당하는 데 몇 가지 문제가 있습니다.

std :: string에 str을 지정하자 마자 코드가 충돌합니다.

다음은 코드입니다.

std::string str; 

    std::cout << "Friendly\n"; 
    str.assign(LIBMTP_Get_Friendlyname(PulsDeviceMngr->device)); 
    if(str.empty()) 
     PulsDeviceMngr->devicename = "Not Defined"; 
    else { 
     PulsDeviceMngr->devicename = str ; 
     str.clear(); 
    } 

또한 대체하려고했습니다 :

str.assign(LIBMTP_Get_Friendlyname(PulsDeviceMngr->device)); 

LIBMTP_Get_Friendlyname

str = LIBMTP_Get_Friendlyname(PulsDeviceMngr->device); 

으로 NULL을 반환 할 수있다이 정의의 FriendlyName되지 않습니다. 이 NULL을 반환하지 않도록 내가 잃었어요

는 .. 그것은 쉬운 이름이 정의되어 있는지 확인 당신의 도움

+2

할당 전에 'NULL'인지 확인해야할까요? 널 포인터를 할당 할 권한이 없다고 확신한다. – Rufflewind

+1

'PulsDeviceMngr-> devicename'은 어떤 타입입니까? –

+0

LIBMTP는 char *을 반환합니다. – Seb

답변

1

에 대한 들으 C++에서 문자열을 사용하고 처음입니다. 또한 LIBMTP_Get_Friendlynam()이 string 또는 char * 형식을 반환하는지 확인하십시오.

0

귀하의 의견은 말한다 :

값이 NULL 있다는 사실에서오고 것으로 보인다 내가 assign 그것을 시도하십시오. empte은 [원문]

귀하의 질문은 말합니다 경우에만하지만 난 값을 얻을 할당 할 수있는 방법이 있어야합니다

LIBMTP_Get_FriendlynameNULL을 반환 할 수 있습니다 정의 Friendlyname이없는 것입니다.

과 같이 std::string::assign 포인터를 전달하면 C 문자열 과부하를 사용하려고 시도합니다. C- 문자열 과부하는 Null 문자에 도달 할 때까지 참조 된 배열의 문자를 복사합니다. 하지만 코드에서 C 문자열이 주소 0에 있다고 말하면서 역 참조를하면 segfault가됩니다.

해결 방법은 이전에 NULL을 반환 한 ""을 반환하는 것입니다.

이렇게하면 항상 assign의 문자열이 있어야합니다.

관련 문제