user-0 提问: 想的脑阔痛，求大佬解决赋值问题！

回复:
user: user-1
content: 引用 8 楼 AlbertS的回复:整理了一下你的代码：需要注意的就是整数和char之间不能使用strcpy来复制  #include<stdio.h> #include<string.h>  #define MAX_CHANGDU 5 #define MAX_MINGZI 64  int main() {  	int i,j; 	int ia,ib; 	char tempName[MAX_MINGZI] = {0}; 	char name[MAX_CHANGDU][MAX_MINGZI]={"张三","李四","王五","老大","老二"}; 	int score[MAX_CHANGDU]={75,85,55,65,95}; 	printf("排序前：\t"); 	for(i = 0; i < MAX_CHANGDU; i++) 	{ 		printf("%s,%d\t",name[i],score[i]); 	} 	printf("\n");   	for(i = 0; i < MAX_CHANGDU -1; i++) 	{ 		ia = score[i]; 		ib = i; 		for(j = i + 1; j < MAX_CHANGDU; j++) 		{ 			if(score[j] < ia) 			{ 				ia = score[j]; 				ib = j; 			} 		}  		// 将较小的分数和名字交换到前面 		if (i != ib) 		{ 			//先将需要交换的ib位置（也就是最小值位置）的内容放到临时变量里，其中分数已经做过了，不需要再赋值 			//ia = score[ib]; 			strcpy(tempName, name[ib]);  			//然后将i位置的内容更新到ib位置 			score[ib] = score[i]; 			strcpy(name[ib],name[i]);  			//再将临时变量中的内容更新会i位置 			score[i] = ia; 			strcpy(name[i], tempName);   			// 至此完成了i位置的分数、名字与ib位置的分数名字交换 		} 		//strcpy(name[i],ia); // 整数和char之间不能使用strcpy 	} 	printf("排序后：\t"); 	for(i = 0; i < MAX_CHANGDU; i++) 	{ 		printf("%s,%d\t",name[i],score[i]); 	} 	return 0; }   运行结果： 排序前：        张三,75 李四,85 王五,55 老大,65 老二,95 排序后：        王五,55 老大,65 张三,75 李四,85 老二,95 大佬，能简单讲讲思路吗，看不懂

user: user-2
content: memcpy可以拷贝连续内存的数据，这个应该可以

user: user-3
content: 整理了一下你的代码：需要注意的就是整数和char之间不能使用strcpy来复制  #include<stdio.h> #include<string.h>  #define MAX_CHANGDU 5 #define MAX_MINGZI 64  int main() {  	int i,j; 	int ia,ib; 	char tempName[MAX_MINGZI] = {0}; 	char name[MAX_CHANGDU][MAX_MINGZI]={"张三","李四","王五","老大","老二"}; 	int score[MAX_CHANGDU]={75,85,55,65,95}; 	printf("排序前：\t"); 	for(i = 0; i < MAX_CHANGDU; i++) 	{ 		printf("%s,%d\t",name[i],score[i]); 	} 	printf("\n");   	for(i = 0; i < MAX_CHANGDU -1; i++) 	{ 		ia = score[i]; 		ib = i; 		for(j = i + 1; j < MAX_CHANGDU; j++) 		{ 			if(score[j] < ia) 			{ 				ia = score[j]; 				ib = j; 			} 		}  		// 将较小的分数和名字交换到前面 		if (i != ib) 		{ 			//先将需要交换的ib位置（也就是最小值位置）的内容放到临时变量里，其中分数已经做过了，不需要再赋值 			//ia = score[ib]; 			strcpy(tempName, name[ib]);  			//然后将i位置的内容更新到ib位置 			score[ib] = score[i]; 			strcpy(name[ib],name[i]);  			//再将临时变量中的内容更新会i位置 			score[i] = ia; 			strcpy(name[i], tempName);   			// 至此完成了i位置的分数、名字与ib位置的分数名字交换 		} 		//strcpy(name[i],ia); // 整数和char之间不能使用strcpy 	} 	printf("排序后：\t"); 	for(i = 0; i < MAX_CHANGDU; i++) 	{ 		printf("%s,%d\t",name[i],score[i]); 	} 	return 0; }   运行结果： 排序前：        张三,75 李四,85 王五,55 老大,65 老二,95 排序后：        王五,55 老大,65 张三,75 李四,85 老二,95

user: user-4
content: strcpy(name[i],ia);明显错了，int数据直接赋值好了

user: user-5
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-6
content: #include<stdio.h> #include<string.h>  int main() { #define MAX_CHANGDU 5 #define MAX_MINGZI 64     int i,j;     int imin, tmp;     char str[MAX_MINGZI];     char name[MAX_CHANGDU][MAX_MINGZI]={"张三","李四","王五","老大","老二"};     int score[MAX_CHANGDU]={75,85,55,65,95};     printf("排序前：\t");     for(i=0;i<MAX_CHANGDU;i++)     {         printf("%s: %d\t",name[i],score[i]);     }     printf("\n");     for (i = 0; i < MAX_CHANGDU; i++) {         imin = i;         for (j = i + 1; j < MAX_CHANGDU; j++)             if (score[imin] > score[j])                 imin = j;         if (imin != i) {             tmp = score[imin];             score[imin] = score[i];             score[i] = tmp;             strcpy(str, name[imin]);             strcpy(name[imin], name[i]);             strcpy(name[i], str);         }     }  #if 0      for(i=0;i<MAX_CHANGDU;i++)     {         ia=score[i];         ib=i;         for(j=i+1;j<MAX_CHANGDU;j++)         {             if(score[j]<ia)             {                 ia=score[j];                 ib=j;             }         }         score[ib]=score[i];         score[i]=ia;          strcpy(name[ib],name[i]);         strcpy(name[i],ia);     } #endif     printf("排序后：\t");     for(i=0;i<MAX_CHANGDU;i++)     {         printf("%s: %d\t", name[i], score[i]);     }     putchar(10);     return 0; } 参考一下吧  楼主的问题在strcpy上，strcpy(name[i],ia);ia是int类型，不能用strcpy。

user: user-7
content: #include <windows.h> #include<string.h> #include<stdio.h>  #define MAX_NAME_NUM 5		// 最大名字数量 #define MAX_NAME_LEN 64		// 最大名字长度   void main() { 	char strName[MAX_NAME_NUM][MAX_NAME_LEN] = {"张三","李四","王五","老大","老二"};	// 名字 	int nIndex[MAX_NAME_NUM] = {0, 1, 2 , 3, 4};										// 分数所对应名字的位置 	int nScore[MAX_NAME_NUM] = {75,85,55,65,95};										// 分数 	int i,j, nTmp;             printf("排序前:\t"); 	for(i=0; i<MAX_NAME_NUM; i++) 	{ 		printf("%s,%d	", strName[i], nScore[i]); 	} 	printf("\n");     	// 冒泡排序 	for(i=0; i<MAX_NAME_NUM-1; i++) 	{ 		for(j=1; j<MAX_NAME_NUM-i; j++) 		{ 			if(nScore[j-1]>nScore[j]) 			{ 				nTmp=nScore[j]; 				nScore[j] = nScore[j-1]; 				nScore[j-1] = nTmp;  				nTmp=nIndex[j]; 				nIndex[j] = nIndex[j-1]; 				nIndex[j-1] = nTmp; 			} 		} 	} 	     printf("排序后:\t"); 	for(i=0; i<MAX_NAME_NUM; i++) 	{ 		printf("%s,%d	", strName[nIndex[i]], nScore[i]); 	} 	printf("\n"); 	system("pause"); }

user: user-0
content: 但是没想到其他解决办法

user: user-7
content: strcpy(name[i],ia);不对，strcpy用于拷贝字符串