在一個項目上工作,並試圖理解爲什麼我得到我得到的錯誤。我對C還是一個新手,這對我來說是一場艱苦的鬥爭。我在這個主題上打開了40或50個標籤,試圖解決我的問題,但無濟於事。C程序錯誤「功能'的衝突類型」
我的錯誤消息位於main函數的原型之前,我爲這個項目提供了一個函數。該函數稱爲utf8_to_codepoint,它很好地將utf8值轉換爲Unicode碼值。
目前我得到的謊言與我的原型語句的唯一錯誤:「衝突的類型‘utf8_to_codepoint’」
我已經嘗試了許多不同的事情,涉及到指針,不涉及指針,包括「常量」和'無符號'的關鍵字等,並沒有任何東西使錯誤消失。
我仍然在努力與指針,我不確定爲什麼這個函數指針作爲其參數。從我所能看到的情況來看,函數只能在一個時間(u)使用一個字符,而我不明白第二個參數的作用。
下面是我對函數的原型,我對函數的調用以及對utf8_to_codepoint函數的代碼。
int utf8_to_codepoint(char, int *);
int main(int argc, char **argv)
{
char sampleText[3000];
int lenptr = 3000;
...
for(int i = 0; fgets(sampleText, 3000, fp) != NULL; i++)
{
int temp;
temp = utf8_to_codepoint(sampleText[i], &lenptr);
...
}
UTF8_To_Codepoint功能
extern unsigned int utf8_to_codepoint(const unsigned char *u,
int *lenptr) {
// Returns 0 if something goes wrong
// Passes back the length
unsigned int cp = 0;
*lenptr = 0;
if (u) {
if (*u < 0xc0) {
cp = (unsigned int)*u;
*lenptr = 1;
} else {
*lenptr = isutf8(u);
if (*lenptr == 0) {
return 0;
}
switch (*lenptr) {
case 2:
cp = (u[0] - 192) * 64 + u[1] - 128;
break;
case 3:
cp = (u[0] - 224) * 4096
+ (u[1] - 128) * 64 + u[2] - 128;
break;
default:
cp = (u[0] - 240) * 262144
+ (u[1] - 128) * 4096
+ (u[2] - 128) * 64 + u[3] - 128;
break;
}
}
}
return cp;
}
錯誤說明了一切。您的utf8_to_codepoint原型與實際函數定義不同。 –
第二個參數/參數是寬度或數字位數,將與1至3一起使用,因此如果轉換爲十六進制,則將0轉換爲999或0至255。 –
第二個參數指向的值在函數中設置。把它看作是一個「out」參數。它會告訴你用多少個字符來生成碼點。 –