标题:strlen函数使用失效,求解答
只看楼主
Feiyiyi1
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2017-10-22
结帖率:62.5%
已结贴  问题点数:20 回复次数:8 
strlen函数使用失效,求解答
#include <stdio.h>
#include <string.h>
int ershi( int m )
{
    int i;
    char str[100];
    for( i=0;m!=0;i++ ){
        str[i]=m%2;
        m=m/2;
    }
    //str[i+1]='\0';
    puts(str);
           
    int len=strlen(str);     //?????????????                                       
    printf("%d\n",len);

    for(;i>-1;i--)
        printf("%d",str[i]);
}
int main()
{
    int n;
    scanf("%d",&n);
    ershi(n);
    printf("\n");
    return 0;
}
一个十进制转化为二进值的函数:(只限十进制正数的转化)
问题一 :strlen()使用得出的值为0
问题二 :用puts()打印出在字符串时出现乱码
注:我测试的时候输入 25  得二进制 011001
求解答:
搜索更多相关主题的帖子: strlen 函数 str int printf 
2017-10-29 18:10
pydlq
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:129
专家分:488
注 册:2017-9-5
得分:5 
char str[100];
你定义的是字符串数组,你把十进制换算成二进制时出现0时实际上就是出现了'\0'.
2017-10-29 19:13
pydlq
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:129
专家分:488
注 册:2017-9-5
得分:5 
而且你这里是int ershi( int m )。我看你main函数,应该是void ershi( int m )
2017-10-29 19:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
int ershi( int m )
{
    int i;
    char str[100];
    for( i=0; m!=0; i++ )
    {
        str[i]=m%2+'0';
        m=m/2;
    }
    str[i]='\0';
    puts(str);

    int len=strlen(str);     //?????????????
    printf("%d\n",len);

    for(--i; i>-1; i--)
        printf("%d",str[i]-'0');
}
2017-10-29 21:28
Feiyiyi1
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2017-10-22
得分:0 
回复 2楼 pydlq
我把 char换成 int型的  输入25
 len的值 打印任为1

2017-10-30 10:38
pydlq
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:129
专家分:488
注 册:2017-9-5
得分:0 
回复 5楼 Feiyiyi1
程序代码:
#include <stdio.h>
#include <string.h>
void ershi( int m )
{
    int i,len=0;
    int str[100];
    for( i=0;m!=0;i++ ){
        str[i]=m%2;
        m=m/2;
        len++;
    }
    //str[i+1]='\0';
    for(i=0;i<len;i++) 
        printf("%d",str[i]);
           
   //int len=strlen(str);     //?????????????                                       
    printf("\n%d\n",len);

    for(i=len-1;i>-1;i--)
        printf("%d",str[i]);
}
int main()
{
    int n;
    scanf("%d",&n);
    ershi(n);
    printf("\n");
    return 0;
}

strlen()是求字符串长度的
2017-10-30 11:08
Feiyiyi1
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2017-10-22
得分:0 
回复 4楼 吹水佬
#include <stdio.h>
#include <string.h>
void ershi( int m )
{
    int i;
    char str[100];
    for( i=0; m!=0; i++ )
    {
        str[i]=m%2+'0';                     //把‘\0’转换为0,使得strlen 可以测试通过
                                    //定义的是字符串数组,
                                   //把十进制换算成二进制时出现0时实际上就是出现了'\0'.
        printf("%c\n",str[i]);
        m=m/2;
    }
//    str[i+1]='\0';
//    str[i]='\0'
    puts(str);
    int len=strlen(str);     
    printf("%d\n",len);
    for(--i;i>-1;i--)
        printf("%d",str[i]-'0');
    //for(; i>-1; i--)
    //    printf("%c",str[i]);
}
int main()
{
    int n;
    scanf("%d",&n);
    ershi(n);
    printf("\n");
    return 0;
}
你的代码很好 谢谢你
还有以下的疑问: (输入25)
1,//    str[i+1]='\0';
//    str[i]='\0'
我把这两个任用一个 或者不用 显示len都是 5 这里for循环结束后 就自动加‘\0’结束符了
2,for(--i;i>-1;i--)
    printf("%d",str[i]-'0');
    //for(; i>-1; i--)
    //    printf("%c",str[i]);
这两个任用一个都可以 ,我的我看我理解  ,就是你的for里面  第一个  --i 不是很理解,因为要是换成 拿掉减号就会出现 -4811001
这个-48 我测试了一下  还是不明白:
int main()
{
    char a[20] = "10001100001";
    printf("%d\n%c\n",a[0],a[0]);
    printf("%d\n%c\n",a[1],a[1]);
    return 0;
}

求解答
2017-10-30 11:23
Feiyiyi1
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2017-10-22
得分:0 
这是我的理解
int main()
{
    char a[20] = "10001100001";
    printf("%d\n%c\n",a[0],a[0]);
    printf("%d\n%c\n",a[1],a[1]);
    return 0;
}
#include <stdio.h>
#include <string.h>
void ershi( int m )
{
    int i;
    char str[100];
    for( i=0; m!=0; i++ )
    {
        str[i]=m%2+'0';              //把‘\0’转换为0,使得strlen 可以测试通过
                                    //定义的是字符串数组,
                                   //把十进制换算成二进制时出现0时实际上就是出现了'\0'.
        printf("%c\n",str[i]);
        m=m/2;
    }
//    str[i+1]='\0';             //后面的'\0'是c编译器自动加上去的
//    str[i]='\0'                //http://
    puts(str);
    int len=strlen(str);
    printf("%d\n",len);
    i=i-1;
    for(;i>-1;i--)
        printf("%d",str[i]-'0');   //
    //for(; i>-1; i--)
    //    printf("%c",str[i]);
}
int main()
{
    int n;
    scanf("%d",&n);
    ershi(n);
    printf("\n");
    return 0;
}
2017-10-30 12:44
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用Feiyiyi1在2017-10-30 11:23:52的发言:
就是你的for里面  第一个  --i 不是很理解

    str[i]='\0' .... 此时 i 在字串结束符
    for(--i; ....... --i, 此时 i 在字串最后一个字符,即从最后一个字符起往前取字符。
2017-10-30 16:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481906-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.175572 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved