| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2443 人关注过本帖
标题: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: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册: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: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册: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
快速回复:strlen函数使用失效,求解答
数据加载中...
 
   



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

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