#include<stdio.h>
#include<string.h>
void* lsearch(void* key,void* base,int size,int elemSize){
int i = 0;
for(i = 0; i < size; i++){
void* elemAddr = ((char*)base + (i * elemSize));
if(memcmp(key,elemAddr,elemSize)==0){
return elemAddr;
}
}
return NULL;
}
int main(){
char* a[] = {"Hello","Good","Morning","Ladies"};
int size = sizeof(a)/sizeof(a[0]);
char* key = "Good";
char* search = (char*)lsearch(&key,&a,size,sizeof(char*));
if(search == NULL){
printf("\n key value not found!! \n");
return -1;
}
printf("\n search : %s \n",search);
return 0;
}
OUTPUT:垃圾值
search : �@
我試圖做琴絃一個lsearch在一個數組...匹配字符串,但我得到打印的垃圾值。爲什麼會這樣..
1)不要用C投'無效*'! 2)不要在你定義類型的地方使用'void *',除非你恨編譯器或者更喜歡調試代碼,因爲類型錯誤編譯器可以很容易地報告! – Olaf
我繼續說:不要在'void *'上做算術運算,這個沒有明確定義。你的搜索函數調用是僞造的,它有太多的'&'運算符 –
甚至更多的問題:'lsearch'假設數組的每個元素大小相等,但'a'中的字符串不是。此外:'lsearch'比較指向字符串的指針,而不是字符串本身。 – Kninnug