Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 返回长无符号int的函数的返回值不正确_C - Fatal编程技术网

C 返回长无符号int的函数的返回值不正确

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

当我从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,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()基本上问题在于没有给出函数的原型。因此,我在主文件中添加了该函数的原型,效果很好!问题是使用了多个文件,我没有给出函数的原型。