你范的错误很多,我简单的指几个:
1、scanf("c",&s2);应该是scanf("%s",&s2)。
2、mystrcopy(char*s1,char*s2,int n);函数不是这么调用的,这是函数声明的方式,调用函数要用实参。应该是mystrcopy(s1,s2,m)。
3、printf("c",s1[N]);除了与第一条范同样的错误外,还有更严重的:不是打印s1[N],这是内存常量地址,应该是printf("%s",s1)。
4、此外,程序不够清晰,这么小的测试你还搞个预定义处理,晕,真的是麻雀虽小五脏俱全了。对于初学者,有益的建议是:抓住重点,逐个突破,不要萝卜青菜一把抓。
scanf("c",&s2) ---> scanf("%s",&s2); //输入字符串
---> scanf("%d",&n); //确定从第几个字符开始复制
mystrcopy(char*s1,char*s2,int m) ---> mystrcopy(s1,s2,n); //直接输入参数
printf("%s\n",s1); //打印字符串
char mystrcopy(char *s1,char *s2,int m)
{
int i,j,k;
k=strlen(s2);
for(j=0,i=m;i
}
}
你的这些问题出现时因为对C语言语法陌生,多做做题目就OK了;
以后会涉及到程序本身的错误,也就是算法实现甚至算法的错误;
现在去下一本 ANSI C99,这是对C语言语法的规定,或许能够开拓你的视野,
帮助你在这条路上走的更远,Good Luck !
#include
#include
#include
char* mystrcopy(char*s1, char*s2, int m);
const int N = 10;
int main(void)
{
char s1[N + 1] = {0};
char s2[N + 1] = {0};
int m = 0;
int nLen = 0;
for (;;)
{
system("cls");
printf("请输入m(m<%d)\n", N);
scanf("%d",&m);
/* 校验输入 */
if (N < m)
{
printf("输入m(%d)非法!\n", m);
continue;
}
printf("字符串s2(长度小于%d,且大于%d):\n", N, m);
scanf("%s",&s2);
nLen = strlen(s2);
if ((N < nLen) || (m >= nLen))
{
printf("输入s1长度(%d)非法!\n", nLen);
continue;
}
getchar();
break;
}
printf("result(%s)\n",mystrcopy(s1, s2, m));
return 0;
}
char* mystrcopy(char*s1,char*s2,int m)
{
/* 字符串拷贝函数 */
strcpy(s1, s2 + m);
return s1;
}
以下程序是编译运行通过的:
#include
#include
void mystrcopy(char*s1,char*s2,int m);
#define N 10
#define M 10
void main()
{
char s1[N],s2[M];
int m;
printf("请输入m和字符串s2:\n");
scanf("%d",&m);
scanf("%s",&s2);
mystrcopy(s1,s2,m);
printf("%s",s1);
}
void mystrcopy(char* s1,char* s2,int m)
{ int a,i;
a=strlen(s2)-m+2;
for(i=0;i s1[i]=s2[m+i-1];
}
复制字符串时记得一定要把字符串的尾巴(也就是字符串结束标志)复制进来,所以要多复制一个字节。
前面二楼说的也差不多了啊!!我只想说基础是最重要的啊,多看书吧