将char *前缀添加到C中的现有char *的最佳方法

是)我有的:

char * a = "world"; char * b = "Hello"; 

我需要的是:

 char * a = "Hello World"; 

我需要先添加b。 这样做有什么function吗?

它可以很容易地完成,如下所示:

 #include #include #include 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); } 

你可以使用strcat(3) , snprintf(3)或asprintf(3)

使用strcat您需要检查缓冲区溢出 (使用strlen(3) …)使用strcatsnprintf ,您需要预先分配数组。 使用asprintf您将获得一个堆分配的缓冲区,您需要适当地free它。

所以,使用strcat和固定大小的缓冲区buf

 char buf[64]; if (strlen(a)+strlen(b) 

或者,您可以使用堆分配的缓冲区:
char*buf = malloc(strlen(a)+strlen(b)+1); 但不要忘记检查malloc失败: if (!buf) { perror("malloc buf"); exit(EXIT_FAILURE); }; if (!buf) { perror("malloc buf"); exit(EXIT_FAILURE); }; 然后像以前一样做strcpystrcat 。 当然,你需要在适当的时候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)来避免内存泄漏 。

另请参见strdup(3) , fmemopen(3)和open_memstream

在你的问题中,你应该交换ab