【问题标题】:warning unsigned long to int in C language警告 unsigned long 到 C 语言中的 int
【发布时间】:2016-11-24 21:17:02
【问题描述】:

我对我的代码有一个简短的问题:

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。

【问题讨论】:

  • 问题是什么?是不是strlen返回类型size_t
  • 我正在做一些练习,并收到一条警告,指出:隐式转换会丢失整数精度 unsigned long 到 int。 plen = strlen(p);这一行。
  • strlen 返回一个 size_t 类型的值,它是您机器上 unsigned long int 的 typedef。
  • 你这么说,但你在问什么?您是在问为什么编译器说您不能将“夸脱放入品脱罐”?
  • for exp 这行没有错误clen=strlen(e); devide=(clen+1)/suc; 因为 clen 是 char 但 plen 是整数。我不明白为什么我得到了错误。

标签: c


【解决方案1】:

如前所述,函数strlen(p) 返回一个size_t 类型的值。以下是 C99 标准的摘要:

size_t

无符号整数类型

这里的重点是它的确切类型(unsignedunsigned long 等)实际上是实现定义的,这意味着它因平台而异。显然,您将其定义为unsigned long,这意味着通过

plen = strlen(p);

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

【讨论】:

    【解决方案2】:

    正确的声明:

    #include <stddef.h>
    
    size_t plen;
    // ...
    plen = strlen(p);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 2016-07-29
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多