2011-08-19 9 views
0

안녕하세요 저는 현재 제 두 번째 비주얼 스튜디오에서 프로젝트를하고 있습니다 ^). 나는 델파이 코더 다. 그래서 나는 나의 무지를 용서해 준다.wcscat_s problem

나는 어떤 파일을 나열하는 간단한 루틴을 쓰고 싶어하고 난

그것은 간단한 함수의 마녀가에 \를 추가 델파이의

IncludeTrailingPathDelimiter() 같은 간단한 기능을 쓰고 싶다 존재하지 않는 경우 ... 경로를 파일

그래서 나는이

void listfiles(wchar_t * root) 
{ 

    if (root[wcslen(root) - 1] != L'\\') 
     wcscat_s(root,wcslen(root)+2,L"\\"); 

    printf("%S",root); 

} 
함께했다그것은 작동

하지만,이 라인을 통해 내가 (스택 부패) 얻을 기능을 종료 한 후

wcscat_s(root,wcslen(root)+2,L"\\"); 

내가 뭘 잘못 내가 새로운 생성 버퍼 또는 무엇에 메모리를 할당해야합니까?

답변

2

안전 문자열 기능을 사용하는 것이 좋지만 올바르게 사용해야합니다. wcscat_s()의 두 번째 인수는 버퍼의 크기입니다. 이 코드에서 버퍼의 크기를 모른다면 wcslen (root) +2가 아닐 것입니다.

void listfiles(wchar_t * root, size_t rootSize) 
{ 
    if (root[wcslen(root) - 1] != L'\\') 
     wcscat_s(root, rootSize, L"\\"); 

    printf("%S",root); 
} 

... 
wchar_t buffer[666]; 
... 
listfile(buffer, sizeof(buffer)/sizeof(buffer[0])); 

을 그리고 당신의 버퍼가 너무 작 으면 이제 디버거가 개입합니다 : 같은 기능을 다시 작성합니다. 그것은.

+0

문제는 버퍼보다 ​​실제로 더 큰 값을 넣으면 다시 예외가 발생한다는 것입니다. – opc0de

+1

이것이 의미하는 것이 확실하지 않습니다. 크기에 대해 거짓말하는 것을 멈추면 어딘가에 도착할 것입니다. –