2009-05-08 3 views
2

나는 wcscat()를 시도했지만 런타임 액세스 위반이 발생합니다.다른 wchar_t를 추가하는 데 도움이 필요합니다! C++

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t* c; 
c = wcscat(a, b); 

누군가가 나에게 무슨 문제가 있다고 말할 수 있습니까? 또는 내 문제를 해결하는 또 다른 방법은? 감사합니다

+3

C++을 사용하는 경우 추가하고 싶습니다. 이것은 일을 잘못 수행하는 방법입니다. C++ 표준 라이브러리에는 C 문자열의 어려움 때문에 문자열 객체가 있습니다. – rlbond

답변

5

wcscat은 새 문자열을 만들지 않습니다. 단지 ba에 추가합니다. 따라서 런타임 액세스 위반을 일으키지 않도록하려면 끝에 b의 공간이 있는지 확인해야합니다. 위의 경우 :

wchar_t a[7] = L"aaa"; 
wchar_t b[] = L"bbb"; 
wchar_t* c; 
c = wcscat(a, b); 

당신은 여전히 ​​함수의 반환 값을 얻을 수 있지만, 단순히 a를 반환합니다.

3

를 사용하여 C++의 wstring의 내장 :

#include <string> 
using std::wstring; 

int main() 
{ 
    wstring a = L"aaa"; 
    wstring b = L"bbb"; 
    wstring c = a + b; 
} 

wcscat는 C 스타일 문자열이 아니라 C++ 스타일의 문자열입니다. 이 작업을 수행하는 C의 방법은

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t c[7]; 
wcscpy(c, a); 
wcscat(c, b); 

편집입니다 : 와우, 지금은 그것을 편집 한 것으로, 그것이 내가 아래 답변 중 하나를 복사 한 것처럼 보이게한다.

+0

다음 올바른 해결책이 있어야합니다! :) –

1

wcscat 함수는 두 번째 인수를 첫 번째 인수의 문자열 버퍼에 추가합니다. C로 문자열을 사용하여 첫 번째 경험이 될 수도 있지만 당신은 수행하여 예를 들어 작품을 만들 수있는 것처럼 보이는 다음

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t c[7]; 
wcscpy(c, a); 
wcscat(c, b); 

C 문자열 조작 함수를 사용하여, 당신은 당신이 충분한 버퍼 공간을 할당하는지 확인해야합니다 문자열 연산이 수행되기 시작합니다 (C 런타임은 사용자를 대신하지 않습니다). 이 경우, 결과 문자열을 저장할 충분한 공간이 버퍼에 있어야 함을 의미합니다 (c). 나는 그 결과가 6 개의 문자와 함께 뒤 따르는 널 문자 인 것을 미리 계산했다. 이것은 7 문자를 할당해야한다는 것을 의미한다.

관련 문제