我想连接两个字符'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);
答案 0 :(得分:1)
它们已按原样连接在一起。这是因为它们在内存中彼此相邻。您已在同一数组和相邻索引中声明它们。
+---------------+
| '7' | '9' |
+---------------+
[0] [1]
这是你内存中的数组。七(charac[0]
)就在九(charac[1]
)旁边。
正如评论中所建议的那样,只需null
终止数组即可完成连接。
charac[2] = '\0';
数组现在是printf()
友好的,因为它是空终止的。
答案 1 :(得分:1)
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:
如果括号括起的列表中的初始值设定项少于元素或成员 用于初始化已知数组的字符串文字中的聚合或更少字符 大小比数组中的元素大,其余的聚合应该是 隐式初始化与具有静态存储持续时间的对象相同。
换句话说,无论何时使用大括号初始化,剩余的项目都是零填充。