user-0 提问: 指针数组copy问题，为什么值传不过来？

回复:
user: user-1
content: j的值和i是同步变化的，将j增加移到拷贝时strcpy(buf[i],array2[j++])

user: user-1
content: 我觉得在拷贝array[3]的时候就应该报错了，buf[3]就已经越界了

user: user-0
content: 引用 2 楼 uoksui 的回复:第一次malloc时应该sizeof(char *)，因为存的是指针，指针占四个字节  这个问题，后来我已经发现了，改正之后还是不行，在你的编译器上可以吗？

user: user-0
content: 引用 1 楼 wujunqi11 的回复:问题如：23行到26行，希望各位大神帮帮忙 这个问题，后来我已经发现了，改正之后还是不行，在你的编译器上可以吗？

user: user-0
content: 后来改成这样就可以，但是不知道为什么上面的不行，求大神告知，谢谢 /* 实现两个字符串的合并，并且排序出来，采用的是三种二维指针的内存输入模型 */ #define  _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h>  char ** sortArray2(const char ** array1, int count1, const char(*array2)[30], int count2,int *buflen) { 	char **buf = (char **)malloc((count1 + count2) * sizeof(char*)); 	int i = 0, j = 0; 	char cmp[30] = { 0 }; 	*buflen = count1 + count2; 	for (i = 0; i < count1 + count2; i++) 	{ 		buf[i] = (char *)malloc(32 * sizeof(char)); 		memset(buf[i], 0, 32 * sizeof(char)); 	}  	printf("排序前:\n"); 	for (i = 0; i < count1; i++) 	{ 		strcpy(buf[i], array1[i]); 		printf("%s ", buf[i]); 	}  	for (j = 0; j < count2; j++,i++) 	{ 		strcpy(buf[i], array2[j]); 		printf("%s ", buf[i]); 	}  	for (i = 0; i < count1 + count2; i++) 	{ 		for (j = i + 1; j < count1 + count2; j++) 		{ 			if (strcmp(buf[i], buf[j]) > 0) 			{ 				strcpy(cmp, buf[i]); 				strcpy(buf[i], buf[j]); 				strcpy(buf[j], cmp); 			} 		} 	} 	return buf; }  void main() { 	char *array1[] = { "1111xxx", "ccccc", "jkdsfj", "34343" }; 	int count1 = sizeof(array1) / sizeof(char *); 	int buflen = 0; 	int i = 0; 	char array2[10][30] = { "xxxxxxxxxxxx", "yyyyyy", "zzzzz" }; 	char **buf = NULL;  	buf = sortArray2(array1, count1, array2, 3, &buflen);  	printf("\n排序后：\n"); 	for (i = 0; i < buflen; i++) 	{ 		printf("%s ", buf[i]); 	} 	system("pause"); }

user: user-1
content: 第一次malloc时应该sizeof(char *)，因为存的是指针，指针占四个字节

user: user-2
content: 引用 1 楼 wujunqi11 的回复:问题如：23行到26行，希望各位大神帮帮忙  如下修改： char **sortArray(const char **array1, int count1, const char(*array2)[30], int count2) { 	char **buf = (char **)malloc((count1 + count2) * sizeof(char)); 	int i = 0, j = 0; 	for (i = 0, j = 0; j < count2; ) 	{ 		buf[i] = (char *)malloc(32 * sizeof(char)); 		if (i < count1) 		{ 			strcpy(buf[i], array1[i]); 			printf("%s ", buf[i]); 			i++; 		} 		else 		{ 			strcpy(buf[i + j], array2[j]); 			printf("%s ", buf[i + j]); 			j++; 		} 	} 	//排序…… 	return buf; }

user: user-2
content: 最后加一句：free(buf);

user: user-2
content: 这样更好：  /* 实现两个字符串的合并，并且排序出来，采用的是三种二维指针的内存输入模型 */ #define  _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h>  char **sortArray2(const char ** array1, int count1, const char(*array2)[30], int count2, int *buflen) { 	char **buf = (char **)malloc((count1 + count2) * sizeof(char*)); 	int i = 0, j = 0; 	//char cmp[30] = { 0 }; 	*buflen = count1 + count2; 	//for (i = 0; i < count1 + count2; i++) 	//{ 	//	buf[i] = (char *)malloc(32 * sizeof(char)); 	//	memset(buf[i], 0, 32 * sizeof(char)); 	//} 	printf("排序前:\n"); 	for (i = 0; i < count1; i++) 	{ 		//strcpy(buf[i], array1[i]); 		buf[i] = array1[i]; 		printf("%s ", buf[i]); 	}  	for (j = 0; j < count2; j++) 	{ 		//strcpy(buf[i], array2[j]); 		buf[i + j] = array2[j]; 		printf("%s ", buf[i + j]); 	} 	for (i = 0; i < count1 + count2; i++) 	{ 		for (j = i + 1; j < count1 + count2; j++) 		{ 			if (strcmp(buf[i], buf[j]) > 0) 			{ 				//strcpy(cmp, buf[i]); 				//strcpy(buf[i], buf[j]); 				//strcpy(buf[j], cmp); 				char *p = buf[i]; 				buf[i] = buf[j]; 				buf[j] = p; 			} 		} 	} 	return buf; } void main() { 	char *array1[] = { "1111xxx", "ccccc", "jkdsfj", "34343" }; 	int count1 = sizeof(array1) / sizeof(char*); 	int buflen = 0; 	int i = 0; 	char array2[10][30] = { "xxxxxxxxxxxx", "yyyyyy", "zzzzz" }; 	char **buf = NULL; 	buf = sortArray2(array1, count1, array2, 3, &buflen); 	printf("\n排序后：\n"); 	for (i = 0; i < buflen; i++) 	{ 		printf("%s ", buf[i]); 	} 	system("pause"); }

user: user-0
content: 问题如：23行到26行，希望各位大神帮帮忙