linux 下对strlen做逻辑判断的有关问题
linux 下对strlen做逻辑判断的问题。
#include <string.h>
int main()
{
char s[]= "123456 ";
char ds[7]= "\0 ";
int a=0;
int d=-1;
int c;
a = strlen(ds)-2;
d = strlen(s) > (strlen(ds)-1);
printf( "strlen(s) is %d\n d is %d; a is %d\n ", strlen(s),d, a);
return 0;
}
程序超级简单。但是输出无法理解:
strlen(s) is 6
d is 0; a is -2
d的值是逻辑判断 strlen(s) > (strlen(ds)-1) 的结果。应该是1。但是却成了0
哪位指点一下啊。不胜感激啊~~
系统是RedHat ES
kernal 版本是2.4.21
------解决方案--------------------
原型size_t strlen(const char *string );
size_t 无符号整数,32位整数的-1 转换为无符号整数是4294967294
------解决方案--------------------
int a=7/2
结果a=3
就是类似这样的问题
------解决方案--------------------
应该就是类型位unsigned int问题.
#include <string.h>
int main()
{
char s[]= "123456 ";
char ds[7]= "\0 ";
int a=0;
int d=-1;
int c;
a = strlen(ds)-2;
d = strlen(s) > (strlen(ds)-1);
printf( "strlen(s) is %d\n d is %d; a is %d\n ", strlen(s),d, a);
return 0;
}
程序超级简单。但是输出无法理解:
strlen(s) is 6
d is 0; a is -2
d的值是逻辑判断 strlen(s) > (strlen(ds)-1) 的结果。应该是1。但是却成了0
哪位指点一下啊。不胜感激啊~~
系统是RedHat ES
kernal 版本是2.4.21
------解决方案--------------------
原型size_t strlen(const char *string );
size_t 无符号整数,32位整数的-1 转换为无符号整数是4294967294
------解决方案--------------------
int a=7/2
结果a=3
就是类似这样的问题
------解决方案--------------------
应该就是类型位unsigned int问题.