C 返回长无符号int的函数的返回值不正确
当我从main调用函数C 返回长无符号int的函数的返回值不正确,c,C,当我从main调用函数wordToInt(c)时,返回值与它在函数中打印的值不同 main() { long long unsigned item; char c[6] = "ABCDE"; item = wordToInt(c); printf("Main The item is :%llu\n",item); } long long unsigned wordToInt(char *c) { long long unsigned int k,it
wordToInt(c)
时,返回值与它在函数中打印的值不同
main()
{
long long unsigned item;
char c[6] = "ABCDE";
item = wordToInt(c);
printf("Main The item is :%llu\n",item);
}
long long unsigned wordToInt(char *c)
{
long long unsigned int k,item=0;
int i,len;
int j,p=0;
len = (int) strlen(c);
for(i = len-1;i>=0;i--)
{
if(c[i] == 'c')
j = 42;
else if(c[i] == '*')
j = 99;
else
j = (int) c[i];
j = j%100;
k = pow(100,p);
p++;
item = item + (j*k);
}
printf("Function item is :%llu\n",item);
return item;
}
程序的输出为:
Function item is :6566676869
Main The item is :18446744071686293893
有人能告诉我为什么输出不一致吗?在
main()
之前添加wordToInt()
的声明,或者将wordToInt()
的主体放在main()
之前。无论哪种方式,编译器都会了解wordToInt()
的原型,只有这样才能传递参数并正确返回返回值。首先——注意编译器的警告,它们很重要
回答--由于您在使用它之前没有对
wordToInt()
进行原型化,编译器警告您它没有原型化,并且它假设函数返回int(小于long)。。。因此返回的是一个int值,而不是long。函数中打印的值是正确的,因为函数知道正确的类型。当给定一个字符串时,字符数组始终会自动在字符串末尾添加一个NULL
字符,因此将大小设置为6
char c[6] = "ABCDE";
当我运行相同的代码时,无论有无更改,输出都是一致的
对于字符大小6
Function item is :6566676869
Main The item is :6566676869
对于字符大小5
Function item is :656667686803780408
Main The item is :656667686803780408
编辑:我在函数调用之前添加了一个原型。我复制并运行了您的程序及其运行。我在两个片段中都发现了相同的结果。我不知道你为什么在主函数中得到错误的答案。不管怎样,我是这样做的
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
long long unsigned wordToInt(char *c)
{
long long unsigned int k,item=0;
int i,len;
int j,p=0;
len = (int) strlen(c);
for(i = len-1;i>=0;i--)
{
if(c[i] == 'c')
j = 42;
else if(c[i] == '*')
j = 99;
else
j = (int) c[i];
j = j%100;
k = pow(100,p);
p++;
item = item + (j*k);
}
printf("Function item is :%llu\n",item);
return item;
}
int main()
{
long long unsigned item;
char c[5] = "ABCDE";
item = wordToInt(c);
printf("Main The item is :%llu\n",item);
getch();
return 0;
}
#包括
#包括
#包括
#包括
长无符号字输入(字符*c)
{
长无符号整数k,项=0;
int i,len;
int j,p=0;
len=(int)strlen(c);
对于(i=len-1;i>=0;i--)
{
如果(c[i]=“c”)
j=42;
else如果(c[i]='*')
j=99;
其他的
j=(int)c[i];
j=j%100;
k=功率(100,p);
p++;
项目=项目+(j*k);
}
printf(“功能项为:%llu\n”,项);
退货项目;
}
int main()
{
长未签名项;
字符c[5]=“ABCDE”;
项目=文字输入(c);
printf(“主项为:%llu\n”,项);
getch();
返回0;
}
然后我用MinGW:gcc-cyourfilename.c编译了它
然后对于可执行文件:gcc-o executable yourFileName.o错误:char数组的初始值设定项字符串太长-编译器有用吗?char c[5]=“ABCDE”;你不觉得你应该给6号吗。空字符另加一个。@VikramSingh,即使是6个字符,也会出现同样的错误。实际上,我在另一个文件中有wordToInt()函数,并与此一起编译file@gopi然后在
main()代码>基本上问题在于没有给出函数的原型。因此,我在主文件中添加了该函数的原型,效果很好!问题是使用了多个文件,我没有给出函数的原型。