我对我的代码有一个简短的问题:
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。
答案 0 :(得分:2)
如上所述,函数strlen(p)
返回类型size_t
的值。这是C99标准的摘要:
为size_t
是无符号整数类型
现在要说明的是它的确切类型(unsigned
,unsigned long
等)实际上是实现定义的,这意味着它根据平台而有所不同。显然你把它定义为unsigned long
,这意味着通过
plen = strlen(p);
您将unsigned long
转换为编译器无法忽略的int
,因为在某些情况下,此转换可能会失去值的精确度。
答案 1 :(得分:1)
正确的声明:
#include <stddef.h>
size_t plen;
// ...
plen = strlen(p);
正如其他人已经指出的那样,strlen()
会返回size_t
。