gpt4 book ai didi

c++ - 将 char[ ][ ] 的地址复制到 C 字符串

转载 作者:行者123 更新时间:2023-11-28 04:19:46 25 4
gpt4 key购买 nike

问题是我没有找到将 char[ ][ ] arr 的地址复制到字符串的正确方法。是的,我对 reinterpret_cast 有所了解,但据我搜索,除了如何计算地址外,我没有找到任何东西,但对复制一无所知。

更准确地说,我有 char **arr,将其初始化为

Hello

World

现在,我想将第二个单词的第二个字母的地址复制到某个 char[] 字符串中。我该怎么做?无论使用 I 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++;
}

最佳答案

填充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"

关于c++ - 将 char[ ][ ] 的地址复制到 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55720151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com