문제
구현하려고 하는데
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;
}