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

时间:2014-04-09 02:52:43

标签: c arrays pointers char concatenation

我想连接两个字符'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);

2 个答案:

答案 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:

  

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

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