user-0 提问: 求助，编写一个函数，将两个字符串链接起来。

回复:
user: user-1
content: 楼主的逻辑写错了，两层循环应该是并列的而不是嵌套  for(int i=0;i<strlen(a);i++){         sum[i]=a[i];         for(int j=1;j<=strlen(b);j++){             sum[i+j]=b[j-1];         }     } -->  for(int i=0;i<strlen(a);i++){         sum[i]=a[i]; }     for(int j=1;j<=strlen(b);j++){         sum[i+j]=b[j-1]; }

user: user-2
content: 注：我是小白，可能代码有些啰唆了 #include<stdio.h> #include<string.h> void main() { 	void lj(char a[20],char b[20]); 	int i=0,j=0; 	char str1[20],str2[20];     gets(str1);     gets(str2); 	lj(str1,str2); } void lj(char a[20],char b[20]) { 	char c[40]; 	int i,s,j,z=0; 	i=strlen(a); 	j=strlen(b); 	for(s=0;s<=i;s++) 	{ 		c[s]=a[s]; 	} 	for(s=i;s<=i+j;s++) 	{ 	 c[s]=b[z]; 	 z++; 	} 	puts(c); }

user: user-3
content: char *mystrcat(char a[], char b[]) {     char *ret = a;     if (a != NULL && b != NULL) {         while (*a != 0) {             a++;         }         while (*b != 0) {             *a++ = *b++;         }         *a = 0;     }     return ret; }

user: user-4
content: 不用str函数:       char* a = "asd";     char* b = "edf";          int lenNew = 0;     char* tmp = a;     while (*tmp != '\0') {         lenNew++;         tmp++;     }     tmp = b;     while (*tmp != '\0') {         lenNew++;         tmp++;     }          char* newStr = malloc((lenNew+1)*sizeof(char));     memset(newStr, 0, (lenNew+1)*sizeof(char));          int newIndex = 0;     tmp = a;     while (*tmp != '\0') {         newStr[newIndex] = *tmp;         tmp++;         newIndex++;     }     tmp = b;     while (*tmp != '\0') {         newStr[newIndex] = *tmp;         tmp++;         newIndex++;     }

user: user-4
content: char* a = "asd";     char* b = "edf";               int lena = strlen(a);     int lenb = strlen(b);     int lenAll = lena + lenb;          char* all = malloc((lenAll+1)*sizeof(char));     memset(all, 0, (lenAll+1)*sizeof(char));          sprintf(all, "%s%s", a,b);          printf(all);

user: user-5
content: 内外循环是什么意思？

user: user-6
content: 二层循环？有问题 简单点的逻辑： 首先确定a的长度 > 连接后的新长度  1. 目的字符串，a,strlen(a),得到a的长度 2. 使用下标寻址，来一个循环，a的尾部逐个加上b的字符 3. 返回地址  4. main函数中，最好使用strcpy(a,返回地址），不用用=号，

user: user-7
content: char sum[200];没有初始化，---》char sum[200] = {‘/0’} 或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';

user: user-8
content: 引用 3 楼 zhangxiangDavaid 的回复:修改如下：  #include<string.h> char *link(char a[], char b[]) { 	int n1, n2; 	n1 = strlen(a), n2 = strlen(b); 	char *res = malloc(n1 + n2 + 1); 	strncpy(res, a, n1); 	strncpy(res + n1, b, n2); 	res[n1 + n2] = 0; 	return res; } int main() { 	char str1[100], str2[100]; 	char *res; 	printf("please input two sentence:\n"); 	scanf("%s%s", str1, str2); 	res = link(str1, str2); 	printf("%s\n", res); 	free(res); 	return 0; } //please input two sentence: //zhangxiang David //zhangxiangDavid  +++这种方法是可以行的~当然也可以直接使用strcat的库函数

user: user-9
content: 字符串以0结尾, 所以sum应该在最后放个0, 这里二重循环是什么意思,不太明白?

user: user-10
content: sum没有字符串结束符号 link函数内for循环有问题，如果参数a长度为1，程序是正常，如果a长度>1那么显示内容并不是两个字符串的拼接

user: user-11
content: 用strcat不好吗？

user: user-12
content: 修改如下：  #include<string.h> char *link(char a[], char b[]) { 	int n1, n2; 	n1 = strlen(a), n2 = strlen(b); 	char *res = malloc(n1 + n2 + 1); 	strncpy(res, a, n1); 	strncpy(res + n1, b, n2); 	res[n1 + n2] = 0; 	return res; } int main() { 	char str1[100], str2[100]; 	char *res; 	printf("please input two sentence:\n"); 	scanf("%s%s", str1, str2); 	res = link(str1, str2); 	printf("%s\n", res); 	free(res); 	return 0; } //please input two sentence: //zhangxiang David //zhangxiangDavid

user: user-13
content: sum结尾没加'\0'

user: user-0
content: 为什么会出现乱码？