2016-11-24 66 views
0

我有一個快速的問題在我的代碼:警告無符號長在C語言詮釋

int main(void) 
{ 
    int i,j,key[5][5],ikey[5][5],row,col,plen,suc; 
    int devide,count,h,k,no,p1[100],e1[100],d1[100]; 
    char p[100],e[100],d[100],clen; 

    printf("Enter your plaintext::::::::"); 
    gets(p); 
    plen = strlen(p); // this line gets error 

警戒線是:

plen = strlen(p); 

隱式轉換失去精確到整數unsigned long類型爲int 。

+2

問題是什麼?是不是'strlen'返回'size_t'類型? –

+0

我正在通過一些練習,並得到一個警告,指出:隱式轉換失去整數精度無符號長整型。 'plen = strlen(p);'這條線。 – misshyde

+0

'strlen'返回一個'size_t'類型的值,它是你機器上'unsigned long int'的typedef。 – skrtbhtngr

回答

1

正確聲明:

#include <stddef.h> 

size_t plen; 
// ... 
plen = strlen(p); 

正如其他人已經指出,strlen()返回size_t

+0

@misshyde你不知道。只要使用它。它已經被定義。 –

2

如前所述,函數strlen(p)返回size_t類型的值。下面是來自C99標準的抽象:

的size_t

這是無符號整型

現在,這裏的關鍵是,什麼確切類型是(unsignedunsigned long等)實際上是實現定義的,這意味着它根據平臺而變化。很明顯,你把它定義爲unsigned long這意味着通過

plen = strlen(p); 

你轉換unsigned longint,編譯器也不能忽視,因爲在某些情況下,這種轉換可能會失去價值的精度。