在一个项目上工作,并试图理解为什么我得到我得到的错误。我对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”参数。它会告诉你用多少个字符来生成码点。 –