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

时间:2019-04-17 04:54:15

标签: c++ pointers char

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

1 个答案:

答案 0 :(得分:1)

在填充import tkinter as tk from tkinter import ttk from tkinter import font import os.path win = tk.Tk() win.title("AR Duplicate File Search") win.geometry("600x600") win.configure(bg = 'green') #----------------------------------Combo Box----------------------------- dl = ['ABCDEFGHIJKLMNOPQRSTUVWXYZ'] drives = ['%s:' % d for d in dl if os.path.exists('%s:' % d)] def convert(list): return tuple(list) listdrive = convert(drives) search_loc_var = tk.StringVar() search_loc_cmbbx1 = ttk.Combobox(win, width = 22, textvariable = search_loc_var, state = 'readonly', values = drives) # Defining the state readonly will restrict the user from typing anything # in the combobox. search_loc_cmbbx1['values'] = listdrive search_loc_cmbbx1.grid(row = 2, column = 1) win.mainloop() 时,用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++

话虽如此,当您说要“例如将第二个单词的第二个字母的地址复制到某个char []字符串中”时,这没有任何意义。您不能将地址复制到字符的数组中。您唯一可以分配地址的地址就是指针,例如:

#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 *ptr = &arr[1][1]; // address of 'o' in "World"