去掉字符串的前导空格,这个程序哪里错了

#include
#include
void main()
{
char s[100];
scanf("%d", &s);
int p=0,i;
for(i=0;s[i];i++)
{
if(s[i]==' ')
p++;
else
break;
}
for(i=0;s[i];i++)
{
s[i]=s[i+p];
}

printf("%s",s);
}

 #include <stdio.h>
void main()
{
    char s[100];
    scanf("%s", s);//修改,输入格式不对
    int p=0,i;
    for(i=0;s[i];i++)
    {
        if(s[i]==' ')
            p++;
        else
            break;
    }
    for(i=p;s[i];i++)//修改
    {
        s[i-p]=s[i];//修改
    }
    s[i-p]=s[i];//修改
    printf("%s",s);
}

有一个函数叫 trim,为什么不试试呢?

下面的代码,功能是有的。但需要注意代码中的注释!

void TestTrim(void)
{
    char s[100];
    int p=0,i;
    strcpy(s,"    abcdefg");
    for(i=0;s[i];i++)
    {
        if(s[i]==' ')
            p++;
        else
            break;
    }
    for(i=0;s[i];i++)
    {
        s[i]=s[i+p];        // i+p 容易产生越界
    }

    printf("%s",s);         // +        s   0x004fef8c "abcdefg"    char [100]
}