我正在尝试修改常见的mergesort,以对字符串结构进行排序。但是我不知道怎么了。在带有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);
}
}
我正在尝试修改常见的mergesort,以对字符串结构进行排序。但是我不知道怎么了。在带有strcpy()和strcmp()的每一行上都会显示一条警告,告知:警告:...
[您误用了char的字符串。在这里strcpy(L[i], keg[low + i].nama);
您没有将一个字符串复制到另一个。您正在将一个字符串复制到数组L
的一个元素。
考虑使用qsort
中内置的<stdlib.h>
功能。
首先我在您的代码中看到: