Копирование адреса char [] [] в C-строку - PullRequest
0 голосов
/ 17 апреля 2019

Проблема в том, что я не могу найти правильный способ скопировать адрес char [] [] arr в строку.Да, я знаю кое-что о reinterpret_cast, но, насколько я гуглил, я ничего не нашел, кроме как подсчитывать адреса, но ничего о копировании.

Точнее, скажем, у меня есть char ** arr, инициализировал его как

Hello

World

А теперь я хочу скопировать, например, адрес второй буквы второго слова в некоторую строку char [].Как мне это сделать?Strcpy всегда жалуется, независимо от того, использую я reinterpet_cast или.

Вот как я создал массив:

char **arr;
arr = new char*[10];
char buf[100];
int i = 0;
while (gets_s(buf) && strlen(buf)!=0 ) {
    *(arr + i) = (char*)malloc(sizeof(buf));
    strcpy(*(arr + i), buf);
    i++;
}

1 Ответ

1 голос
/ 17 апреля 2019

При заполнении arr замените оба вхождения *(arr + i) на arr[i] и замените sizeof(buf) на strlen(buf)+1.

char **arr;
arr = new char*[10];
char buf[100];
int i = 0;
while (gets_s(buf) && (strlen(buf) != 0) && (i < 10)) {
    arr[i] = (char*) malloc(strlen(buf)+1);
    strcpy(arr[i], buf);
    i++;
}

И не забудьте free()выделенные строки, когда вы закончите, используя их:

for (int j = 0; j < i; j++) {
    free(arr[j]);
}

Но ваш вопрос помечен c++, и этот код очень C, а не C ++.Вместо этого C ++ будет выглядеть примерно так:

#include <iostream>
#include <vector>
#include <string>

std::vector<std::string> arr;
std::string buf;
while (std::getline(std::cin, buf) && !buf.empty()) {
    arr.push_back(buf);
}

При этом, когда вы говорите, что хотите «скопировать, например, адрес второй буквы второго слова в некоторую строку char []»,это бессмысленно.Вы не можете скопировать адрес в массив из символов .Единственный объект, которому вы можете назначить адрес - это указатель , например:

char *ptr = &arr[1][1]; // address of 'o' in "World"

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

char ch = ptr[3]; // 'd' in "World"
...