당신은 대신 사본 루프 ('==
'대 '=
')의 루프를 비교 서면으로 작성했습니다, 당신은 당신이 쓰는 잘못된 포인터 증가됩니다
while(*(*dest++) == *src++);
(추가를 라인 :
*(*(++dest)) = '\0';
는 질문에 대한 최신 정보 추가되었습니다 나는 모든 것을 분석하는 시도하려는 모르겠어요이 문제에 대한 해결책의 일부가 아닌 D를 참조하십시오... 아래 iscussion)
즉 올바른 얻을 수있는 가장 쉬운 방법은 아마도 다음과 같습니다.
char *tgt = *dest;
while ((*tgt++ = *src++) != '\0')
;
우리는 나는)이 같은 짓 (단계에서 코드를 수정할 수 있습니다 :
static void myfunc(const char* src, char** dest)
{
*dest = (char *)malloc(200);
char *tgt = *dest;
while ((*(tgt++) = *(src++)) != '\0')
;
}
이 parenthesises을 루프의 표현식을 완전히.
static void myfunc(const char* src, char** dest)
{
*dest = (char *)malloc(200);
char *tgt = *dest;
while ((*((*dest)++) = *(src++)) != '\0')
;
printf("1: %s\n", tgt);
}
을 그리고 이것은 1: hello
를 인쇄하지만, 메인 프로그램이 복사 된 문자열의 끝에서 당신이 *dest
을 수정했기 때문에 그렇게는 NUL '\0'
를 가리키는 빈 줄을 인쇄 : 우리는 지금 tgt
에 대한 *dest
을 대체 할 수 있습니다.
static void myfunc(const char* src, char** dest)
{
*dest = (char *)malloc(200);
char *tgt = *dest;
while ((*((*dest)++) = *(src++)) != '\0')
;
printf("1: %s\n", tgt);
*dest = tgt;
}
을 그리고 main()
는 정답을 인쇄합니다 : 그래서, 당신은해야 할 것입니다. 그러나 tgt
('대상'의 약자로, 보통 대상에 대해 dst
을 사용하지만 그 값은 dest
에 너무 가깝습니다.)을 사용하는 경우, 처음에는 *dest
이 증가하는 복잡성을 피할 수 있습니다 .
사실, 당신은 사용을 고려해야합니다 :
#include <string.h>
...
strcpy(*dest, src);
이 문자열을 복사 할 수 있습니다. strcpy()
을 사용하면 '빠름', '더 간단'하고 명확하게 정확할 수 있습니다.
또한, 당신은해야합니다
#include <stdlib.h>
이 malloc()
를 선언 할 수 있습니다.
그리고 main()
에 대한 올바른 반환 형식이 int
입니다 :
C99에서
int main()
{
...
return(0);
}
, 반환이 누락 된 경우 (유감스럽게도) 옵션 제로 (성공)을 가정 할 것이다; 이는 C++ 98의 동작과 일치합니다. 이전 버전의 C에서는 반환이 선택 사항이 아니 었습니다.
'dest'에는 데이터가 없습니다.먼저 유효한 데이터로 채우고 null로 종료되었는지 확인한 다음'=='연산을 수행하십시오. – Mahesh
성취하려는 것은 무엇입니까? 그것은 경계 검사가없는 각각의 문자를 비교하려고 시도하는 것처럼 보이고,'malloc'을 수행 한 후에는 어떤 것도'dest'를 설정하지 않습니다. – Joe
'char **'을 증가 시키면 다음'char *'를 가리키고 다음'char'는 가리 키지 않습니다. – sidyll