注册 登录
编程论坛 C++教室

求手机短号 怎么错了?求大神帮忙。

cc644288455 发布于 2013-01-04 18:49, 357 次点击
#include<stdio.h>
int main()
{
    char s[11],t[6];
    int n,i;
    scanf("%d",&n);
    while(n--)
    {
            scanf("%s",s);
        t[0]='6';
        for(i=1;i<=6;i++)
        {
            t[i]=s[5+i];
        }
        printf("%s\n",t);
    }
    return 0;
}

不知道为什么说我的某个测试数据错了呢。实在看不出来啊。不要其他的方法,只求解为什么错了。
5 回复
#2
xyaliner2013-01-04 19:19
#include<stdio.h>
int main()
{
    char s[12],t[7];
    int n,i;
    scanf("%d",&n);
    while(n--)
    {
            scanf("%s",s);
        t[0]='6';
        for(i=1;i<6;i++)
        {
            t[i]=s[5+i];
        }
        t[i]='\n';
        printf("%s\n",t);
    }
    return 0;
}

红字部分!
#3
cc6442884552013-01-04 19:38
回复 2楼 xyaliner
太感谢啦。不过'\n'应该是‘\0’哦。我可以问为什么我的那个是错的呢?数组S里不是有‘\0’么?赋值给t为什么就不行了呢?
#4
liqingqinger2013-01-04 20:38
我这个菜鸟可以说布怎么懂这个原理麽?
#5
xyaliner2013-01-04 21:49
回复 3楼 cc644288455
#include<stdio.h>
int main()
{
    char s[12],t[7];
    int n,i;
    scanf("%d",&n);
    while(n--)
    {
            scanf("%s",s);
        t[0]='6';
        for(i=1;i<=6;i++)
        {
            t[i]=s[5+i];
        }

        printf("%s\n",t);
    }
    return 0;
}

我多此一举了,scanf函数能给数组s在最后自动加上'\0',所以 t[i]='\0'; 不要,i<6改为i<=6就是了。
这样数组t最后也有字符串结束标志,t本身是没有'\0'的。
#6
qunxingw2013-01-04 22:22
字符数组的大小比实际字符长度strlen要多1个'\0'
1