繁体   English   中英

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

[英]Copying address of char[ ][ ] to C-string

问题是我找不到将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++;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM