我試圖寫一個快速功能用於過濾一個char **,並把結果放到另一個字符**寫一個快速過濾功能對於一個char **
這是我寫:
/*
-filterable is what is to be filtered
-filter is the filter
-filtered is the result applying the filter to filterable
*/
void filter(const char** filterable,const char * filter,char** filtered)
{
memset(filtered,'\0',sizeof(filtered));
int i=0;
int j=0;
int filter_length=strlen(filter);
int items=sizeof(filterable)/sizeof((char *) filterable); //segfault?
while(items--)
{
if((strncmp(filter,filterable[i],filter_length)==0))
strcpy(filtered[j++],filterable[i]);
i++;
}
}
問題是我不認爲我正在從「過濾」正確獲取行數,因爲我得到了段錯誤。有什麼建議麼?這是過濾char **的最快方法嗎?
後評論:
好吧,我看大家的意見和下面的似乎是工作。鑑於這需要很快,我把註冊關鍵字,雖然我聽說它不能保證這些天什麼。
void filter(char ** filterable, const char * filter, char ** filtered, int filters)
{
register int i=0;
register int j=0;
int filter_length=strlen(filter);
while(filters--)
{
if((strncmp(filter,filterable[i],filter_length)==0))
strcpy(filtered[j++],filterable[i]);
i++;
}
}
'sizeof'的使用不當。你將一個指針作爲參數傳遞給運算符'sizeof'。您需要在函數參數中傳遞大小。 – pmg 2011-03-31 14:29:45
由於這個quetion被標記爲C++,你有沒有任何理由不在這裏使用C++容器,而不是原始緩衝區?即:std :: vector –
Jem
2011-03-31 14:35:09
'sizeof(可過濾)/ sizeof((char *)可過濾)'始終爲1,因爲指向'char **'和char *'的指針具有相同的大小。如果您想知道可過濾元素的數量,請將其作爲參數傳遞給函數。 – Thalur 2011-03-31 14:43:44