사용자 정의 문자열 복사 기능을 사용하여 char *에서 char *로 복사 할 때 심각한 오류 발생

니콜라스
 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';
 }
Vlad / 모스크바

이 진술을 봐

result[i] = new char[(endRange - startRange + 1)];

당신이 복사해야 할 것이 분명하다 str에서 startRange까지 endRange종료 0으로 결과 문자열을하고 추가합니다.

그러나 모든 문자열을 복사하려고합니다 str.

strCopy(result[i], str);

like std::strncpy또는 like 함수를 작성하고 std::memcpy이를 사용하여 하위 문자열을 복사해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관