将c字符串复制到char数组中

时间:2015-06-02 20:16:28

标签: c++ arrays

C新手,仍然掌握指针。我正在尝试将c字符串的副本添加到char数组中,以便

char temp[40];
temp[0] = 'a';
temp[1] = 'b';
temp[2] = 'c';
temp[3] = NULL;
char *container[40] = {0};
strcpy(container[0], temp);
cout << container[0] << endl;

打印“abc”。试图制作副本因为temp不断被新字符和指向temp的指针所取代显然是不够的,因为我想在打印abc之后这样做。

char temp[40];
temp[0] = 'd';
temp[1] = 'e';
temp[2] = 'f';
temp[3] = NULL;
char *container[40] = {0};
strcpy(container[1], temp);
cout << container[1] << endl;

打印'def'。 P.S这是我到目前为止所做的,但它不起作用。我不太确定我是否正确使用strcpy,但任何替代方案都会有所帮助。

1 个答案:

答案 0 :(得分:3)

您正在使用strcpy,但是您没有给它正确的内存。这就是为什么你的程序都有未定义的行为 - 它们写入未初始化指针指向的内存。

要解决此问题,请使用container

malloc的每个元素分配内存
char temp[40];
temp[0] = 'a';
temp[1] = 'b';
temp[2] = 'c';
temp[3] = NULL;
char *container[40] = {0};
container[0] = (char*)malloc(strlen(temp)+1);
strcpy(container[0], temp);
cout << container[0] << endl;

您需要将1添加到strlen的结果中,以便容纳C字符串的空终止符。 请注意,malloc的强制转换只是因为您使用的是C ++;在C中,malloc前面的演员阵容可以被删除。

注意:我认为这是学习使用“原始”指针的学习方法,因为C ++提供了更好的处理字符串的工具。特别是,您的容器可以替换为std::vector<std::string>,它会在您向其添加项目时动态增长,并管理自己的内存,从而无需使用mallocstrcpy