问题:输入一个字符串到字符数组s1中,将s1中的字符串复制到字符数组s2中并输出s2中的字符串。
用数组下标操作可以很容易实现:
#include<stdio.h>
#include<string.h>
int main(void)
{
char s1[10],s2[10];
int i;
scanf("%s",s1);
for(i=0;i<=strlen(s1);i++)
{
s2[i]=s1[i];
}
printf("%s",s2);
return 0;
}
然后想试一试用指针操作,但遇到了问题:
这样写代码就会出问题,运行结果中并不能打出s2(其中s1以及确保能够接受到输入的字符串)
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char *s1,*s2;
int i;
s1=(char*)malloc(sizeof(char)*10);
s2=(char*)malloc(sizeof(char)*10);
scanf("%s",s1);
while((*s2++ = *s1++) != '\0')
;
for(i=0;i<6;i++)
printf("%c",s2[i]);
return 0;
}
但这样就可以:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char *s1,s[10];
int i;
char *s2=s;
s1=(char*)malloc(sizeof(char)*10);
scanf("%s",s1);
while((*s2++ = *s1++) != '\0')
;
for(i=0;i<6;i++)
printf("%c",s[i]);
return 0;
}
是什么原因呢?
另外指针操作是不是不太好实现‘\0’也复制的要求。