char** strSplit(const char* str, const char splitter)
{
unsigned long splitterCount = strSplitCount(str, splitter) + 1;
char** result = new char*[splitterCount];
unsigned long startRange = 0, endRange = 0;
for (unsigned long i = 0; i < splitterCount; i++)
{
while (str[endRange] == splitter)
{
endRange++;
startRange++;
}
while (str[endRange] != splitter && str[endRange] != '\0')
{
endRange++;
}
result[i] = new char[(endRange - startRange + 1)];
strCopy(result[i], str);
// unsigned long indexOffset = 0;
// for (unsigned long j = startRange; j < endRange; j++)
// {
// if (str[j] != splitter)
// {
// result[i][indexOffset] = str[j];
// }
// indexOffset++;
// }
// result[i][indexOffset] = '\0';
//
// startRange = ++endRange;
}
return result;
}
이 함수는 cstring의 const char *와 문자열 내에서 분할 할 위치의 const char를받습니다. 이 함수는 문자열을 char **로 올바르게 분할하고 반환합니다. 함수를 더 깔끔하게 보이게하기 위해이 기능 밖에서 올바르게 작동하는 strCopy 함수를 만들었습니다. 그러나 Visual Studio 함수 내에서 strCopy를 사용하면 심각한 오류가 발생합니다. 그러나 주석 처리 된 코드의 주석 처리를 제거하고 strCopy 함수를 제거하면 더 흥미롭게 만들기 위해 데이터가 올바르게 복사되고 오류가 발생하지 않습니다. 그렇다면 왜 내 strCopy 기능이 작동하지 않습니까?
void strCopy(char* dest, const char* src)
{
while (*src)
{
*dest = *src;
src++;
dest++;
}
*dest = '\0';
}
이 진술을 봐
result[i] = new char[(endRange - startRange + 1)];
당신이 복사해야 할 것이 분명하다 str
에서 startRange
까지 endRange
종료 0으로 결과 문자열을하고 추가합니다.
그러나 모든 문자열을 복사하려고합니다 str
.
strCopy(result[i], str);
like std::strncpy
또는 like 함수를 작성하고 std::memcpy
이를 사용하여 하위 문자열을 복사해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다