Что не так с этой копией строки с использованием кода указателей? - PullRequest
0 голосов
/ 01 мая 2020

Я хочу скопировать строку с помощью символьных указателей. Я пробовал этот код, но он ничего не печатает.

#include <iostream>
#include <cstring>

using namespace std;

int main() {
    const char *ptr1 = "madhava";
    char *ptr2 = new char[strlen(ptr1)+1]; //get the memory
    while(*ptr1){
        *ptr2 = *ptr1;
        ptr2++;
        ptr1++;
    }
    *ptr2 = '\0';
    printf("%s",ptr2); //print the target
    return 0;
}

Ответы [ 2 ]

1 голос
/ 01 мая 2020
#include <iostream>
#include <cstring>

using namespace std;

int main() {
    const char *ptr1 = "madhava";
    char *ptr2 = new char[strlen(ptr1)+1]; //get the memory
    char *ptr3=ptr2; //create new pointer which points to ptr2
    while(*ptr1){
        *ptr2 = *ptr1;
        ptr2++;
        ptr1++;
    }

    *ptr2 = '\0';
    printf("%s",ptr3); //print the target // change ptr2 to ptr3
    return 0;
}

Проблема в вашем коде заключается в том, что ptr2 указывает на конец строки.

1 голос
/ 01 мая 2020

Проблема в том, что к тому времени, когда вы пытаетесь напечатать строку, ptr2 указывает на ее конец. Попробуйте сделать копию этого указателя и обойти строку.

    char *ptr2 = new char[strlen(ptr1)+1];
    char *ptr3 = ptr2; // create a copy of the pointer and work with that
    while(*ptr1){
        *ptr3 = *ptr1;
        ptr3++;
        ptr1++;
    }
    *ptr3 = '\0';
    printf("%s",ptr2);
    delete[] ptr2;
    // ... and then null out ptr2 or ptr3 if needed

Вы должны рассмотреть возможность использования std::string вместо того, чтобы делать это вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...