用C语言警告unsigned long to int

时间:2016-11-24 21:17:02

标签: 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 个答案:

答案 0 :(得分:2)

如上所述,函数strlen(p)返回类型size_t的值。这是C99标准的摘要:

  

为size_t

     

是无符号整数类型

现在要说明的是它的确切类型(unsignedunsigned long等)实际上是实现定义的,这意味着它根据平台而有所不同。显然你把它定义为unsigned long,这意味着通过

plen = strlen(p);

您将unsigned long转换为编译器无法忽略的int,因为在某些情况下,此转换可能会失去值的精确度。

答案 1 :(得分:1)

正确的声明:

#include <stddef.h>

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

正如其他人已经指出的那样,strlen()会返回size_t