Who 發問時間: 電腦與網際網路程式設計 · 8 年前

關於 void* 問題 [C語言]

作業要求要寫一個自己的memcmp函數

我不確定能不能改參數的型態

如果不能改

我這樣寫:

int main()

{

char* s1="snoopy";

char* s2="snoop";

printf("%d\n",mymemcmp(s1,s2,5));

system("pause");

return 0;

}

int mymemcmp(const void* s1,const void* s2,size_t n)

{

while(*s1==*s2 && *s1 && n>0){ //3

s1++; //4

s2++; //5

n--;

}

return *s1-*s2; //8

}

1.

在第三行和第八行

編譯器告訴我

'const void *' is not a pointer to object type

2,

在四,五行

編譯器告訴我空指標不能作加減

於是我改成:

(char*)s1++;

結果還是一樣的錯誤訊息(奇怪,型態轉換不是比較優先嗎)

於是我又改成:

((char*)s1)++;

結果編譯器跟我說他需要左值:

lvalue required as increment operand

PS:

1.

其實只要把參數中的void*改成char*

就ok了

只是我不曉得符不符合作業要求

2.

如你們所見

我傳入的是兩個字串,型態char*

不知道是不是問題所在

3.

我用的編譯器是Code::Blocks

4

如果可以的話

可以解釋一下空指標怎麼用嗎.

已更新項目:

請跟我解釋

1.為甚麼錯

2.我該怎麼改

2 個已更新項目:

感謝阿平

第二個問題已經解決了

不過還有第一個:

在第三行和第八行

編譯器告訴我error:

'const void *' is not a pointer to object type

3 個已更新項目:

sorry我在耍蠢

反正就是每個s1,s2都要轉成char*就是了

那這樣我又面臨了另一個完全不同的問題

我這樣寫就只適用於char了

可是memcmp的本意好像是所有型態都可以比較

這樣要怎麼寫啊?

4 個已更新項目:

我現在的問題好像已經跟我的標題沒甚麼關聯了

我要寫一個跟memcmp功能相同的函數

現在一點想法都沒有

1 個解答

評分
還有問題?馬上發問,尋求解答。