2014-10-14 5 views
0

주어진 길이와 시작 인덱스로 주어진 배열을 chars 배열로 하위 문자열로 변환하기 위해 자체 함수를 작성하려고합니다.어설 션 오류가 발생했습니다. 하위 문자열을 만들 때 오류가 발생했습니다.

코드를 실행할 때 "디버그 어설 션 실패" 오류가 발생합니다. "tcscpy_s.inl"의 프로그램도 실패한 (표현 : L은 "버퍼가 너무 작습니다"& & 0)

이 내 코드입니다 :

char* String_Substring(char* OriginalString, int StartIndex, int Length) 
{ 
    // Allocate space for the new string by it's given length. 
    char* StrToRet = (char*)malloc((Length + 1) * sizeof(char)); 

    // Move to the start position of the sub - string. 
    OriginalString += StartIndex; 

    // Copy the requested sub - string to 'StrToRet' 
    strcpy_s(StrToRet, Length, OriginalString); 

    return StrToRet; 
} 

가 어떻게이 문제를 해결할 수 있습니까?

+0

이 코드 세그먼트에서 버그가 발생했는지 확인하십시오. 실제로 메모리가 할당되었는지 확인 했습니까? – abiessu

+2

아마도 관련이 없지만 기술적으로 malloc은'(Length + 1) * sizeof (char)'이어야합니다. –

+0

@chuex 네 말이 맞아. 내가 바꿨어. – Aviv

답변

0

StrToRet에 더 많은 메모리를 할당 해보십시오. StartIndex와 Length가 음수가 아니고 OriginalString이 null로 끝나는 문자열을 수정해야합니다.

+0

할당 된 것보다 더 많은 것 같아 보입니다 ... – abiessu

2

버퍼 크기에는 0 (할당이 올바르게 완료되었지만)을 종료하는 공간이 포함되지 않습니다. 시도하십시오

strcpy_s(StrToRet, Length + 1, OriginalString); 
+0

그것은 작동합니다! 고맙습니다 ! 문제가 해결되었습니다. – Aviv

관련 문제