문제

구현하려고 하는데

void strcpyy(char *s, char *t){
    while(*s++ = *t++){
    }
}

이는 K&R의 예입니다.구현은 상당히 쉬워야 하지만 어떤 이유에서인지 지금은 그렇지 않습니다.그래서 나는 다음을 가지고 있습니다

int main(){
    char *mess = "hello world";
    char *mess = (char *) malloc(strlen(mess) + 1);
    char *aess;

    strcpyy(aess, mess);

    printf("%s", aess);

    return 0;
}

프로그램을 실행할 때마다 다음과 같이 실행할 때마다 계속해서 큰 오류 목록이 표시됩니다. -Wall.구현하고 사용하는 것이 좋다고 생각합니다. strcpyy, 문자열을 복사하려면 공간을 malloc해야 하며, 그렇게 하면 인쇄할 수 있어야 합니다. aess 이론적으로는 다음의 복사본을 포함해야 합니다. mess.어떤 도움이라도 주시면 감사하겠습니다!

도움이 되었습니까?

해결책

항상 오류 메시지, 특히 첫 번째 메시지 (종종 첫 번째 오류의 결과 임)에주의를 기울이는 것이 좋습니다.오류 메시지는 분명히 MALLOC로 라인에 해당하는 줄 번호를 나타내 었으며 대부분의 문제는 무엇이 문제가되는지 말씀 드렸을 것입니다.

읽을 프로그램을 수정하십시오.

char *mess = "hello world";
char *aess = (char *) malloc(strlen(mess) + 1);
.

또는 전체 기능은 다음과 같습니다.

int main(){
    char *mess = "hello world";
    char *aess = (char *) malloc(strlen(mess) + 1);

    strcpyy(aess, mess);

    printf("%s", aess);

    return 0;
}
.

문제는 귀하의 선이 귀하의 선

char *mess = (char *) malloc(strlen(mess) + 1);
.

첫 번째 줄을 덮어 씁니다

char *mess = "hello world";
.

및 라인

char *aess;
.

변수가 지정되지 않은 변수를 남깁니다.

컴파일 오류는 컴파일러가

사이에서 선택할 수 없기 때문입니다.
char *mess = "hello world";
.

char *mess = (char *) malloc(strlen(mess) + 1);
.

각각 같은 이름으로 새로운 변수를 도입하는

다른 팁

프로그램은 다음과 같은 방법으로

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strcpyy( char *s, const char *t )
{
    while ( *s++ = *t++ );
}

int main( void )
{
    char *t = "hello world";
    char *s = ( char * )malloc( strlen( t ) + 1 );

    strcpyy( s, t );

    printf( "%s\n", s );

    free( s );

    return 0;
}
.

변화

char *mess = "hello world";
char *mess = (char *) malloc(strlen(mess) + 1);
char *aess;

에게

char *mess = "hello world";
char *aess = malloc(strlen(mess) + 1);

mess 읽기 전용 메모리에 보관되는 문자열 리터럴입니다.덮어쓰고 복사하려는 문자열을 잃어버렸습니다.귀하의 경우 문자를 복사하려는 위치에 공간을 할당해야 합니다. aess 변하기 쉬운.또한 다음 사항을 기억하세요. free(aess); 프로그램이 끝나면.그렇지 않으면 메모리 누수가 발생합니다.

왜 선언하고 정의하고 있습니까? mess 두 번?동일한 범위를 가진 두 개의 변수를 동일한 이름으로 선언하지 마십시오. 이렇게 하면 컴파일러가 혼란스러워집니다.나는 다음을 사용하는 것이 좋습니다 strdup 이와 같이 :

int main(){
char *mess = strdup("hello world");
char *aess;

strcpyy(aess, mess);

printf("%s", aess);

return 0;

}

아니면 그냥 이런 일반 배열

int main(){

char mess[] = "hello world";
char *aess;

strcpyy(aess, mess);

printf("%s", aess);

return 0;

}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top