繁体   English   中英

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

[英]copy a c string into a char array

C语言的新手,仍然可以掌握指针。 我正在尝试将ac字符串的副本添加到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'。 附言:这是我到目前为止所拥有的,但是没有用。 我不太确定即时通讯是否正确使用了strcpy,但是任何替代方法都会有所帮助。

您正确使用了strcpy ,但是没有给它适当的内存。 这就是您的两个程序都具有未定义行为的原因-它们将写入未初始化指针所指向的内存。

要解决此问题,请使用malloc将内存分配给container每个元素:

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;

您需要在strlen的结果中加1 ,以适应C字符串的空终止符。 注意,仅因为使用C ++,才需要进行malloc 在C语言中,可以删除malloc前面的类型转换。

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

暂无
暂无

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

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