При заполнении 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"