2014-10-14 4 views
0

Я пытаюсь написать свою собственную функцию, чтобы подстроить заданный указатель на массив символов, заданную длину и начальный индекс.Утверждение Ошибка при попытке создать подстроку

Когда я выполняю код, я получаю сообщение об ошибке «Ошибка отладки». Программа failes в "tcscpy_s.inl" (Expression: 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. Сделайте shure, что неотрицательное число StartIndex и Length и OriginalString верят строку с нулевым завершением.

+0

Похоже, что было сделано более чем достаточно ... – abiessu

2

Размер буфера не включает пробел для завершения 0 (хотя распределение выполняется правильно). Попробуйте

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

Это работает !!! Спасибо ! Проблема решена. – Aviv