如何将char数组case 和连接到C中的char指针?

我想连接两个字符’7’和’9’来形成这个字符串“79”。

首先,我初始化了变量。 (限制:我只能使用字符类型,我不能再使用另一个字符变量。)

char *charac = (char *) malloc(sizeof(char) * 200); char *combined = (char *) malloc(sizeof(char) * 200); 

然后我给出了charac [0]和charac [1]的值。

 charac[0] = '7'; charac[1] = '9'; printf("charac[0] : %c\n", charac[0] ); printf("charac[1] : %c\n", charac[1] ); 

我想连接charac [0]和charac [1]

 strcpy(combined, (char*)charac[0]); strcat(combined, (char*)charac[1]); printf("combined : %s\n", combined); free(combined); 

但上面的代码不起作用。 我收到错误消息:“警告:从不同大小的整数转换为指针”。

阅读完所有意见和建议后,我获得了我想要的输出结果。

这是最终的代码:

 char *charac = (char *) malloc(sizeof(char) * 200); char *combined = (char *) malloc(sizeof(char) * 200); charac[0] = '7'; charac[1] = '9'; charac[2] = '\0'; printf("charac[0] : %c\n", charac[0] ); printf("charac[1] : %c\n", charac[1] ); printf("charac[2] : %c\n", charac[2] ); strcpy(combined, & charac[0]); strcat(combined, & charac[1]); strcpy(combined, & charac[0]); strcat(combined, & charac[2]); printf("combined : %s\n", combined); free(combined); 

它们已按原样连接在一起。 这是因为它们在记忆中彼此相邻。 您已在同一数组和相邻索引中声明它们。

 +---------------+ | '7' | '9' | +---------------+ [0] [1] 

这是你内存中的数组。 七个( charac[0] )紧挨着九个( charac[1] )。 正如注释中所建议的那样,只需null终止数组即可完成连接。

 charac[2] = '\0'; 

该数组现在是printf()友好的,因为它是空终止的。

C中的字符串由单个字符后跟空(零字节)组成。 所以字符串“79”的长度为3。

字符串放入字符数组存储中。 您可以在堆上分配它,但只是声明一个数组更简单。 所以代码是:

 char charac[3]; charac[0] = '7'; charac[1] = '9'; charac[2] = '\0'; // or just 0 

更简单:

 char charac[3] = { '7', '9' }; // the 0 just happens 

更简单:

 char charac[] = "79"; 

这三段代码中的每一段都完全相同。


在回应评论时,C标准中初始化聚合体的处理定义如下:n1570 S6.7.9 / 21:

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同。

换句话说,无论何时使用大括号初始化,剩余的项目都是零填充。