【发布时间】:2020-04-05 12:06:08
【问题描述】:
我正在尝试修改一个常见的归并排序,用于对字符串结构进行排序。但我不知道出了什么问题。带有 strcpy() 和 strcmp() 的每一行都会出现一条警告,告诉您:
warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]|
C:\Program Files (x86)\CodeBlocks\MinGW\include\string.h|45|note: expected 'char *' but argument is of type 'char'|
它建议我把 * 放在 char L[n1] 和 R[n2]
But even if i declare
char *L[n1]
char *R[n2]
它总是停在 strcpy() 甚至可能停在 strcmp() 。 . .我不明白为什么。有没有人知道如何 strcpy 和 strcmp 这两个?
struct kegiatan{
char nama[50];
};
void merge(struct kegiatan *keg, int low, int mid, int high){
int i, j, k;
int n1 = mid - low + 1;
int n2 = high - mid;
char L[n1];
char R[n2];
for(i = 0; i < n1; i++){
strcpy(L[i], keg[low + i].nama); // the program always stops here.
}
printf("L = %s", L[i]);
printf("keg = %s", keg[low + i].nama);
system("pause");
for(j = 0; j < n2; j++){
strcpy(R[j], keg[mid + 1 + j].nama);
}
i = 0;
j = 0;
k = low;
while(i < n1 && j < n2){
if(strcmp(L[i], R[j]) < 0){
strcpy(keg[k].nama, L[i]);
i++;
} else{
strcpy(keg[k].nama, R[j]);
j++;
}
k++;
}
while (i < n1) {
strcpy(keg[k].nama, L[I]);
i++;
k++;
}
while(j < n2) {
strcpy(keg[k].nama, R[j]);
j++;
k++;
}
}
void mergesort(struct kegiatan *keg, int low, int high){
if(low < high){
int mid = (low + high) / 2;
mergesort(keg, low, mid);
mergesort(keg, mid + 1, high);
merge(keg, low, mid, high);
}
}
【问题讨论】: