void fun(char * s0,char *s1,char *s2, char *s3)
{
int len=strlen(s0);
int i=0,j=0,k=0;
char *p1=s0,*p2=s0+1,*p3=s0+2;
while(p1<s0+len||p2<s0+len||p3<s0+len)
{
if(p1<s0+len)
{
s1[i++]=*p1;
p1=p1+3;
}
if(p2<s0+len)
{
s2[j++]=*p2;
p2=p2+3;
}
if(p3<s0+len)
{
s3[k++]=*p3;
p3=p3+3;
}
}
s1[i]='\0';
s2[j]='\0';
s3[k]='\0';
}
/*
1.字符串长度和内存访问:
使用 strlen(s0) 来获取字符串 s0 的长度。确保 s0 是一个有效的、以空字符 '\0' 结尾的字符串。
访问字符串时,必须确保不会超出字符串的边界。在这个函数中,通过比较指针 p1, p2, p3 与 s0+len 来防止越界。
2.指针运算:
p1, p2, p3 分别初始化为指向 s0 的第一个、第二个和第三个字符的指针。
在循环中,这些指针分别递增,以遍历字符串 s0。
3.循环条件:
循环继续执行,直到所有三个指针都超出字符串 s0 的末尾。使用 ||(逻辑或)确保只要任何一个指针没有到达字符串末尾,循环就继续。
4.字符串终止:
在循环结束后,必须手动在 s1, s2, s3 的末尾添加空字符 '\0',以确保它们是正确终止的字符串。
*/
错误代码
void fun(char * s0,char *s1,char *s2, char *s3)
{
int i=0,j=0,k=0;
char *p1=s0,*p2=s0+1,*p3=s0+2;
while(*p1!=' '||*p2!=' '||*p3!=' ')//不能将字符是否为空判断是否结束,因为字符串中可能含有空格
{
for(i;*p1!=' ';i++) //遍历的条件:指针小于字符串的长度
{
s1[i++]=*p1;
p1=p1+3;
}
for(j;*p2!=' ';j++)
{
s2[j++]=*p2;
p2=p2+3;
}
for(k;*p3!=' ';k++)
{
s3[k++]=*p3;
p3=p3+3;
}
}
s1[i]='\0';
s2[j]='\0';
s3[k]='\0';
}