2014-02-06 202 views
1

當我從main調用函數wordToInt(c)時,返回值與它在函數內打印的返回值不同。函數返回long long unsigned int的返回值不正確

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 

誰能告訴我爲什麼會出現不一致的輸出?

+2

*錯誤:初始化字符串的字符數組太長* - 編譯器不是有用的嗎? – chris

+0

char c [5] =「ABCDE」;你不認爲你應該給大小爲6.一個額外的空字符。 –

+0

@VikramSingh即使是6也會發生同樣的錯誤 – gopi

回答

6

首先 - 注意你的編譯器的警告,它們很重要!

回答 - 因爲在使用它之前你沒有使用原型​​,所以編譯器警告你它沒有被原型化,並且假定函數返回一個int(它比long長),所以你得到了一個int值,而不是很長。函數中打印的值是正確的,因爲函數知道正確的類型。

給定字符的字符串時
2

main()之前加上​​的聲明,或者在main()之前加上​​的正文。無論哪種方式,編譯器都會知道​​的原型,只有這樣才能傳遞參數並返回正確的值。

+0

其實我在另一個文件中有wordToInt()函數並且與這個文件一起編譯 – gopi

+0

@gopi然後在'main()'之前添加'wordToInt() long long unsigned wordToInt(char * c);' – neverhoodboy

+0

基本上問題在於沒有給出函數的原型。所以我在主文件中添加了函數的原型,並且它工作正常! – gopi

0

char數組總是添加一個NULL字符到字符串的結束時自動所以使尺寸至6

char c[6] = "ABCDE"; 

並且輸出是一致的,當我跑用相同的代碼和沒有變化。

對於char大小6

Function item is :6566676869 
Main The item is :6566676869 

對於char大小5

Function item is :656667686803780408 
Main The item is :656667686803780408 

編輯:我加入之前函數調用的原型。

0

我複製並運行您的程序及其工作。我在兩部分中都找到了相同的結果。我不知道你爲什麼在主要功能中得到錯誤的答案。無論如何,這是我是如何做到的。

#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; 
} 

然後我使用MinGW編譯它:gcc的-c yourFileName.c 然後可執行:gcc的-o可執行yourFileName.o

+0

問題是使用多個文件,我沒有給主函數的原型。 – gopi

相關問題