我有什么:
char * a = "world";
char * b = "Hello";
我需要的是:
char * a = "Hello World";
我需要先添加b。 有没有这样做的功能?
答案 0 :(得分:3)
您可以使用strcat(3),snprintf(3)或asprintf(3)
使用strcat
,您需要检查buffer overflow(使用strlen(3) ...)
使用strcat
& snprintf
,您需要预先分配数组。
使用asprintf
,您将获得一个堆分配的缓冲区,并且您需要free
它。
所以,使用strcat
和固定大小的缓冲区buf
:
char buf[64];
if (strlen(a)+strlen(b)<sizeof(buf)) {
strcpy(buf, a);
strcat(buf, b);
}
// now buf contains "worldhello"
或者您可以使用堆分配缓冲区:
char*buf = malloc(strlen(a)+strlen(b)+1);
但不要忘记检查malloc
失败:if (!buf) { perror("malloc buf"); exit(EXIT_FAILURE); };
然后执行strcpy
}&amp; strcat
和以前一样。当然,您需要在适当的时间free(buf)
之后。请注意,您可以保留int lena=strlen(a);
,然后strcpy(buf+lena,b)
,而不是调用strcat
。
使用snprintf
和固定大小的缓冲区buf
(不需要检查缓冲区溢出,因为snprintf
给出了缓冲区大小):
char buf[54];
int len= snprintf(buf, sizeof(buf), "%s%s", a, b);
// now buf contains "worldhello" and len contains the required length
关于snprintf
的好处是理解printf
格式控制字符串(例如%d
表示十进制整数,%g
表示浮点科学表示法等。 ..)
使用asprintf
(在提供它的Linux系统上)
char* buf = asprintf("%s%s", a, b);
但您需要在适当的时候致电free(buf)
以避免memory leak。
另请参阅strdup(3),fmemopen(3)和open_memstream
在您的问题中,您应该交换a
和b
答案 1 :(得分:3)
可以轻松完成,如下所示:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char * a = "world";
char * b = "Hello";
char *c = malloc(strlen(a)+strlen(b)+1);
strcpy(c,b);
strcat(c,a);
printf("%s\n",c);
free(c);
}