提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • 一言堂

    40人对此回答表示赞同

    #include<stdio.h>
    void main()
    {
    char *p="i am the best";
    char a[20];
    int i=0;
    for(;*p!='\0';i++) //*p++!='\0'的话这里加1,下面又加1,多了一次
    a[i]=*p++;
    a[i]='\0';
    for(i=0;i<20&&a[i]!='\0';i++)
    printf("%c",a[i]);
    //你循环了20次,但i am the best没有20个字符长,而你在
    //*p!='\0'时终止了复制,所以出现乱码
    //用printf("%s",a);并把循环去掉
    //或者像上面那样加个判断条件
    }
    展开
    40
    0回复
    发布于 7年前

    评论(0)

    收起评论

  • 那都不是事儿

    40人对此回答表示赞同

    #include<stdio.h>
    #include<string.h>
    void main()
    {
    char *p="i am the best";
    char a[20];
    int i=0;
    for(;*p!='\0';i++)//改过改过改过改过改过
    a[i]=*p++;
    a[i]='\0';

    for(i=0;i<strlen(a);i++)//改过改过改过改过改过
    printf("%c",a[i]);
    }
    展开
    40
    0回复
    发布于 8年前

    评论(0)

    收起评论

  • Taj

    40人对此回答表示赞同


    原因有二:
    1.a[20[没有进行初始化。如果一个自动存储类型的数组没有初始化,也没有对其元素赋值,每个元素的值都是无法预先确定的。也就是你后面的“烫烫烫”出现的原因
    2.你对p进行了两次自加运算。第一次是在控制语句for中。第二次是在循环中,因此实际上每进行一次循环,p的位置前进2位

    我对你的代码进行了下改动,编译,运行都ok,最后的显示结果是"I 'm the best"

    #include<stdio.h>

    void main()
    {
    char *p="i am the best";
    char a[20]={'\0'}; /*对数组要养成初始化的习惯*/
    int i=0;
    for(;*p!='\0';i++)
    a[i]=*p++; /*去掉多一次的p++*/
    a[i]='\0';
    for(i=0;i<20;i++)
    printf("%c",a[i]);
    }

    学习顺利
    展开
    40
    0回复
    发布于 8年前

    评论(0)

    收起评论

  • Hannah

    40人对此回答表示赞同


    for(i=0;i<20;i++)
    printf("%c",a[i]);
    改成
    printf("%s\n",a);
    展开
    40
    0回复
    发布于 9年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部