AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

字符串复制最后会多出一些乱码的字符



1


题目链接 Acwing 765

我想把字符串复制然后在字符间加空格,为啥有些结果输出会多输出一些乱码字符呢

错误的代码:

#include <cstdio>

int main()
{
    char c[101], s[301];
    fgets(c, 101, stdin);
    for(int i=0; c[i] ; i++){
        s[2*i] = c[i];
        s[2*i+1] = ' ';
    }
    for(int i=0; s[i]; i++)
        printf("%c", s[i]);

    return 0;
}

编译器报了什么错误?Compile Error? Runtime Error?



提问于18天前
不是很皮
4143


1 个问答



1

#include <cstdio>

int main()
{
    char c[101]={0,0}, s[301]={0,0};
    fgets(c, 101, stdin);
    for(int i=0; c[i] ; i++){
        s[2*i] = c[i];
        s[2*i+1] = ' ';
    }
    for(int i=0; s[i]; i++)
        printf("%c", s[i]);

    return 0;
}

代码帮你改好了,乱码原因是因为你这里用的是char,但是你又没有初始化s,这样s的各个元素就会被系统自动赋值,以至于s[i]在越界之前一直有值,所以会输出乱码,只要给其赋初值就行了,当然也不用全部赋值,给头一两个赋值后,之后的所有提都会自动赋值为0,这样就不会再往下循环了

回答于18天前
溃极
127

@不是很皮:  比如说I am student,而申请的fgets长度为15,那么就应该是这样的:c[0]='I',c[1]=' ',c[2]='m' ··· ··· c[12]='\0',c[13]=0 (注意此处是数字0,不是字符0) –  溃极   17天前

@不是很皮:  不是,\0只会在最后一位有效字符后出现,而其他的未赋值的将会为0,比如 –  溃极   17天前

感谢大佬!!!那就是初始化字符数组时候最好都要赋值吗?那使用fgets读入的时候,它会自动将申请的长度范围内的字符数组的未赋值的位置的值赋值为'\0'吗?比如fgets申请长度是101,但是输入是"I am stu.",其长度明显小于101,那会把长度以外的其他位置的只都补为'\0'? –  不是很皮   18天前


我来回答
你确定删除吗?

© 2018-2020 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息