문제

이것은 오늘 나의 두 번째 문제입니다. 포인터는 나에게 악몽을주고 있습니다. 나는 strcpy () 함수와 같은 일을하는 프로그램을 만들려고 노력하고있다. 일단 시도한 후에 .. 충돌하고 나는 그것이 내 코드에서 포인터 문제라고 확신한다. 나는 일종의 양의 지형화 된 포인터가 있기 때문에 (*복사). 그러나 나는 그것에 null을 할당했다. 나는 그것의 사용을 오해한다고 생각하기 때문이다. 그리고 정상적으로 실행하기 위해 프로그램에 어떤 수정을 할 수 있는지 알려주세요.

 #include <iostream>
 using namespace std;

 void mycpy(char *b , char *a);

 int main()
 {

    char *original = "this is a text" ;
    char *copied = 0 ;

    mycpy(copied , original);

    for(int i = 0 ; *(copied+i) ;i++) cout << *(copied+i) ;

    return 0;
}

void mycpy(char *b , char *a){

    for(int i = 0 ; *(a+i) ; i++) *(b+i) = *(a+i);

}

미리 감사드립니다.

도움이 되었습니까?

해결책

글쎄, 당신 mycpy 거의 옳습니다 (산술 대신 괄호를 사용할 수는 있지만 a[i] 대신에 *(a+1)). 복사 된 문자열을 올바르게 인쇄하려면 마지막 문자는 0이어야하지만 마지막 문자는 ~ 아니다 당신의 기능에 의해 복사. 그래서 그것은 오히려와 같아야합니다

void mycpy(char *b , char *a)
{
    int i;
    for(i = 0 ; *(a+i) ; i++) *(b+i) = *(a+i);
    *(b+i) = 0; // or "\0", doesn't matter    
}

또한 변수입니다

char *copied = 0 ;

유효한 메모리를 가리키지 않으므로 불법 인 메모리 위치 0에서 읽고 있습니다. 변수를 배열로 정의 할 수 있습니다

char copied[20];

다른 팁

사본 작업 결과에 대해서는 약간의 메모리를 할당해야합니다.

당신의 경우 copied 초기화되지 않았으므로 널 포인터에 편지를 쓰려고합니다. 다음은 귀하가 복사 할 수있는 충분한 메모리를 할당합니다. original ~ 안으로 copied

char* copied = new char[strlen(original)+1];

당신은 포인터를 가지고 있지만, 그들은 어떤 기억을 가리키지 않습니다. 이것이 작동하기 위해 약간의 기억을 할당해야합니다.

char *original;

그것은 유형 숯의 메모리에 대한 포인터 일뿐입니다. 당신은 그것을 포인터 일뿐 때문에 "이것은 텍스트입니다"라고 설정할 수는 없습니다. "이것은 텍스트입니다"를 저장할 공간이 없습니다.

char original[ 15 ] = "this is a text";
char copied[ 15 ] = "this is a text";

OR

char *original;
char * copied;

original = malloc( 15 );
copied = malloc( 15 );

mycpy( original, "this is a text" );
mycpy( copied, original );

이 두 가지 방법은 텍스트를 저장하기 위해 15 바이트를 가져옵니다. 첫 번째 예제는 스택에서 15 바이트를 사용합니다. 두 번째 예제는 힙에서 15 바이트를 사용합니다.

결정된:

 #include <iostream>
 using namespace std;

 void mycpy(char *b , char *a);

 int main()
 {

    char *original = "this is a text" ;
    char copied[30]; // you need to actualy allocate space 
    // (this is on stack, you could use new as well, for heap allocation)

    mycpy(copied , original);

    for(int i = 0 ; *(copied+i) ;i++) cout << *(copied+i) ;

    return 0;
}

void mycpy(char *b , char *a){
    int i =0;
    while (*(a+i)) {
        *(b+i) = *(a+i);
        ++i;
    }
    *(b+i) = '\0'; // null termination
}

이 라인에서 :

for(int i = 0 ; *(a+i) ; i++) *(b+i) = *(a+i);

그것은 단조의 여지가 있습니다 b+i 오류가 발생합니다. 당신은 불균형입니다 0 (null), 이것은 숫자 1 포인터 오류입니다.

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