c - 为什么 strlen() 每次都返回 2 或 1?

标签 c

为什么 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;
}

最佳答案

strlen 返回字符数组的长度,直到在其中找到字符'\0'(数值为0) .您的 binary 数组是字符数组,但在存储数值 01 时,您将它们视为整数。在计算其长度时,strlen 在找到您编写的第一个 0 时停止。

要得到你需要的答案,将binary定义改为char binary[20] = { 0 };,保存剩余值作为 ASCII 字符 (binary[i] = '0' + (char)remainder;),并将它们打印为字符 printf("%c ",binary[i]);

关于c - 为什么 strlen() 每次都返回 2 或 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800440/

相关文章:

c - isdigit 和 scanf 具有无限循环

c - 从图书馆给出指针

c - b->next->next 在链表中给出错误

c - 试图找出导致 sigsegv 故障的原因

c - float 的下界

c - 在指针数组的 qsort 实现中使用 FOR 循环但不使用 WHILE 时出现段错误

c - Linux中如何读取 "proc/pid/stat"中的开始时间数据来计算耗时?

在收到 SIGSEGV 或 SIGBUS 后,进程能否以某种方式继续而不会崩溃?

c++ - 为什么在 C 和 C++ 中的算术运算之前必须将 short 转换为 int?

c - fork父子通信