处理一个项目,并试图理解我为什么会收到我得到的错误。我还是C的新手,这对我来说是一场挣扎。我在这个主题上打开了40或50个标签,试图解决我的问题,但无济于事。
我的错误消息位于main之前,我在这个项目中使用了我提供的函数的原型。该函数名为utf8_to_codepoint,它很好..将utf8值转换为Unicode代码点值。
目前唯一的错误在于我的原型声明:“'utf8_to_codepoint'的冲突类型”
我尝试了许多不同的东西,涉及指针,不涉及指针,包括'const'和'unsigned'关键字等,没有任何东西使错误消失。
我仍在努力使用指针,我不确定为什么这个函数将指针作为其'参数。从我所看到的,该函数一次只能使用一个字符(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;
}
答案 0 :(得分:3)
你声明你的功能如下:
int utf8_to_codepoint(char, int *);
但是这样定义:
unsigned int utf8_to_codepoint(const unsigned char *u,
int *lenptr) {
返回类型不匹配,并且第一个参数的类型不匹配。
将声明更改为:
unsigned int utf8_to_codepoint(const unsigned char *u, int *lenptr);
更改通话:
lenptr = 0;
....
for(int i = 0; fgets(sampleText, 3000, fp) != NULL; i += lenptr)
{
int temp;
temp = utf8_to_codepoint(&sampleText[i], &lenptr);
...
}
答案 1 :(得分:1)
功能的类型显然不匹配:
原型是
int utf8_to_codepoint(char, int *);
,而您定义的功能是
extern unsigned int utf8_to_codepoint(const unsigned char *u, int *lenptr);
具体为unsigned int
!= int
和const unsigned char *
!= char
。
您需要弄清楚哪些是正确的声明并替换另一个。