为什么strlen()没有返回确切的值?
例如,当我输入123时它返回2.对于12345,它返回1.为什么?
#include<stdio.h>
#include<string.h>
int main()
{
long int ui,remainder,i=0,len;
char binary[20];
scanf("%ld",&ui);
while(ui!=0) {
remainder=ui%2;
binary[i]=(char)remainder;
printf("%d ",remainder);
ui=ui/2;
i++;
}
binary[i]='\0';
printf("len is %ld\n",strlen(binary));
for(i=len-1;i>=0;i--) printf("%d",binary[i]);
return 0;
}
答案 0 :(得分:2)
.htaccess
返回字符数组的长度,直到找到字符strlen
(带有数值'\0'
)。您的0
数组是一个字符数组,但您将它们视为整数,因为您正在存储数值binary
和0
。在计算其长度时,1
会在找到您编写的第一个strlen
时停止。
要获得所需答案,请将0
定义更改为binary
,将char binary[20] = { 0 };
值保存为ASCII字符(remainder
),然后将其打印为字符{ {1}}
答案 1 :(得分:2)
它无法正常工作的原因在于您使用binary
的方式。
strlen
函数用于对NULL终止的字符串进行操作。但binary
不是作为字符串处理,而是作为字节数组。
strlen
函数搜索直到找到空字节,即值为0的字节。在“123”的情况下,值0出现在两个字节之后。在“12345”的情况下,值0出现在一个字节之后。这解释了你得到的输出。
此外,您正在使用len
而未初始化它。这导致未定义的行为。退出i
循环后,您希望将其设置为while
。您还需要将printf
的第一个%d
的格式说明符更改为%ld
,因为remainder
被声明为long int
。
答案 2 :(得分:2)
这里有一些问题,二进制是一个char,所以它的'0'+值也以这种方式打印出来;
#include<stdio.h>
#include<string.h>
int main()
{
long int ui,remainder,i=0,len;
char binary[20] = {0};
scanf("%ld",&ui);
if (ui==0) { binary[i] = '0'; i++; } // Special case for zero
while(ui!=0) {
remainder=ui%2;
binary[i]=(char)remainder + '0';
printf("%d ",remainder);
ui=ui/2;
i++;
}
binary[i]='\0';
printf("len is %ld %s\n",len = strlen(binary), binary);
for(i=len-1;i>=0;i--)
printf("%c",binary[i]);
return 0;
}
为了我的运行,我得到了
32
0 0 0 0 0 1 len是6 000001
100000