0
我有一個結構:bsearch與結構的指針數組
typedef struct entry_t {
char * name;
int lines [MAX];
int n;/*n lines*/
} entry_t;
和結構entry_t * list[MAX];
我嘗試使用bsearch如果一個人在我下面的函數的存在是爲了得到一個條目的數組:
int addToList(entry_t * list[], int n, const char * name, int lineNr){
int i = 0;
int j = 0;
entry_t * entry;
entry_t * sentry;
bool found = false;
char * tmp = (char*) malloc(sizeof(char)*MAX);
sentry = (entry_t *) bsearch(name,list,n,sizeof(entry_t *), cmpEntries2);
if(sentry != NULL){
printf("%s",sentry->name);
i = sentry->n;
sentry->lines[i] = lineNr;
sentry->n++;
}
else {
sentry = (entry_t *) malloc(sizeof(entry_t));
strcpy(tmp,name);
sentry->name = tmp;
sentry->lines[0] = lineNr;
sentry->n = 1;
list[n] = sentry;
n++;
}
return n;
}
int cmpEntries2(const void * a, const void * b){
assert (a != NULL);
assert (b != NULL);
printf("DB %s %s\n",(const char*)a,(*(entry_t **)b)->name);
return strcmp((const char*)a, (*(entry_t **)b)->name);
}
我的數據庫日誌
DB argc main
DB argv main
DB printf argc
DB printf argv
DB printf argc
DB printf argv
DB printf printf
0M:
奇怪的是,那sentry
不是null,但name
是奇怪的東西(隨機存儲位置)。
THX(用於接收的bsearch()
結果時)
如果你刪除struct(typedef struct),你的回答是正確的,thx很多 – user547995 2014-11-23 23:48:00
寫'struct entry_t'和簡單的'entry_t'應該在你的代碼中是相等的。但是,寫'struct'和避免'typedef'通常是一種更好的風格 – ensc 2014-11-23 23:50:47