【问题标题】:Copying address of char[ ][ ] to C-string将 char[ ][ ] 的地址复制到 C 字符串
【发布时间】:2023-04-11 01:44:01
【问题描述】:

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

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

Hello

World

现在,我想将第二个单词的第二个字母的地址复制到某个 char[] 字符串。我该怎么做?无论使用我 reinterpet_cast 还是,strcpy 总是抱怨。

这就是我创建数组的方式:

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++;
}

【问题讨论】:

  • 您要复制地址还是字符
  • 啊,不好意思,没看到。我想复制字符的地址。
  • I want to copy [...] address of second letter [...] to some char[] string 是什么意思,如果您打印复制地址的字符串,您的预期输出是什么?
  • 我想将 arr[i][j] 的字节地址复制到 char[ ] 。因此 char[ ] 必须包含“00B86...”。想象一下,我们有整数矩阵,想要获取元素的地址并将其保存在 char [ ]
  • @Tovarisch 你不能将 address 复制到 characters 数组中。只有一个指针可以被分配一个地址。因此,您需要明确说明您要完成的工作,因为您的描述毫无意义

标签: c++ pointers char


【解决方案1】:

填充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++ 功能。不过,我在这里没有看到任何解决方案,问题肯定不是 C 风格的
  • 小伙子。我只是想知道我能否以某种方式将该地址 strcpy 到 char []。我理解你的意思,我应该按照你的描述初始化指针。又来了。
  • @Tovarisch strcpy()characters 从一个 char 数组复制到另一个数组。它根本与复制 地址 无关。因此,要么您只是使用了错误的术语,要么您根本缺乏对事物运作方式的理解。
猜你喜欢
  • 2012-10-11
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多