user-0 提问: 代码未实现功能>_<#复制字符串每隔3个字符中间有一个空格~~

回复:
user: user-0
content: 引用 9 楼 akari10032 的回复:[quote=引用 8 楼 自信男孩的回复:][quote=引用 6 楼 akari10032 的回复:] 赋空格时指针没++， 改成if (i % 4 == 0)  *sc++ = ' '; 你的改动可以先试一下：是否真的可以实现你想要的～[/quote] 你直接改了跑一下吧，我手上没有编译器，如果没有解决我等下午摸到电脑再试试[/quote] 没有实现。。  #include<stdio.h> #include<stdlib.h> #include<string.h> void stringcpy3(char s[],char sc[]){  int i=1;  while(*s){   if(i%4==0) *sc=' ';   //我改成这样也不行。。。 *sc=*s; sc++; s++;  i++; }  *sc='\0'; }  int main(int argc, char const *argv[]) { char str[88]="afdsjklajfkljaslkjfdslaafls"; char strc[88];  // gets(str); stringcpy3(str,strc); puts(strc); system("pause"); return 0; }

user: user-1
content: 引用 8 楼 自信男孩的回复:[quote=引用 6 楼 akari10032 的回复:] 赋空格时指针没++， 改成if (i % 4 == 0)  *sc++ = ' '; 你的改动可以先试一下：是否真的可以实现你想要的～[/quote] 你直接改了跑一下吧，我手上没有编译器，如果没有解决我等下午摸到电脑再试试

user: user-2
content: 引用 6 楼 akari10032 的回复:赋空格时指针没++， 改成if (i % 4 == 0)  *sc++ = ' '; 你的改动可以先试一下：是否真的可以实现你想要的～

user: user-2
content: 引用 5 楼 weixin_42810814 的回复:[quote=引用 4 楼 自信男孩 的回复:] [quote=引用 3 楼 weixin_42810814 的回复:] [quote=引用 2 楼 自信男孩 的回复:] while(*s){         *sc=*s;         if(i%4 == 0)             *(sc++) = ' ';         sc++;         s++;         i++;     } 楼主这样操作，会把刚复制给sc的字符用' '（空格）吃掉。 这里不是只有满足if条件才会放空格吗？[/quote] 是呢，放空格地方没问题，你有没有注意，*(sc++) = ' ';这句，是先赋值再让sc++；[/quote] 改成*sc=' ';好像也不行！[/quote] 试试*(++sc) = ' ';

user: user-1
content: 赋空格时指针没++， 改成if (i % 4 == 0)  *sc++ = ' ';

user: user-0
content: 引用 4 楼 自信男孩 的回复:[quote=引用 3 楼 weixin_42810814 的回复:] [quote=引用 2 楼 自信男孩 的回复:] while(*s){         *sc=*s;         if(i%4 == 0)             *(sc++) = ' ';         sc++;         s++;         i++;     } 楼主这样操作，会把刚复制给sc的字符用' '（空格）吃掉。 这里不是只有满足if条件才会放空格吗？[/quote] 是呢，放空格地方没问题，你有没有注意，*(sc++) = ' ';这句，是先赋值再让sc++；[/quote] 改成*sc=' ';好像也不行！

user: user-2
content: 引用 3 楼 weixin_42810814 的回复:[quote=引用 2 楼 自信男孩 的回复:] while(*s){         *sc=*s;         if(i%4 == 0)             *(sc++) = ' ';         sc++;         s++;         i++;     } 楼主这样操作，会把刚复制给sc的字符用' '（空格）吃掉。 这里不是只有满足if条件才会放空格吗？[/quote] 是呢，放空格地方没问题，你有没有注意，*(sc++) = ' ';这句，是先赋值再让sc++；

user: user-0
content: 引用 2 楼 自信男孩 的回复:while(*s){         *sc=*s;         if(i%4 == 0)             *(sc++) = ' ';         sc++;         s++;         i++;     } 楼主这样操作，会把刚复制给sc的字符用' '（空格）吃掉。 这里不是只有满足if条件才会放空格吗？

user: user-2
content: while(*s){         *sc=*s;         if(i%4 == 0)             *(sc++) = ' ';         sc++;         s++;         i++;     } 楼主这样操作，会把刚复制给sc的字符用' '（空格）吃掉。

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<string.h>  void stringcpy3(char s[],char sc[]) {     int i=1;  #if 0     while(*s){         *sc=*s;         if(i%4 == 0)             *(sc++) = ' ';         sc++;         s++;         i++;     }     *sc = '\0'; #else     while(*s){         *sc++ = *s++;         if(i % 3 == 0)             *(sc++) = ' ';         i++;     }     *sc = 0;  #endif }  int main(int argc, char const *argv[]) {     char str[88];     char strc[88];     gets(str);     puts(str);     stringcpy3(str,strc);     puts(strc);     system("pause");     return 0; } 供参考～

user: user-0
content: 字符串复制：为什么只有前4次的循环实现了效果在第四个位置复制了空格，而第八个位置却没有复制空格而是在第9个位置复制了空格呢？

user: user-0

user: user-0
content: 引用 13 楼 akari10032 的回复:跑一下试试， 因为从1到4需要3次循环，但从4到8就需要四次了，之后每次i到8的倍数有需要四次循环  我不明白的也就是在这里： 因为设置了int i=1;  if(i%4==0) *(sc++)='  ';  为什么只有前4次的循环实现了效果在第四个复制了空格，而第八个位置却没有复制空格 而是在第9个位置复制了空格呢？ 9%4==1并不满足条件呀！

user: user-1
content: 引用 12 楼 weixin_42810814的回复:[quote=引用 11 楼 akari10032 的回复:] void stringcpy3(char s[],char sc[]){  int i=0;  while(*s){   if(i%3==0) *sc++=' ';   //我改成这样也不行。。。 *sc=*s; sc++; s++;  i++; }  *sc='\0'; } 算了  在你代码上直接改吧， 有两个错误点，一个是i对4取模，这会导致每隔4字符才会添加一个空格；二是你赋空格时没对指向目标数组的指针加加，导致拷贝下一个字符时空格被覆盖 引用 11 楼 akari10032 的回复:void stringcpy3(char s[],char sc[]){  int i=0;  while(*s){   if(i%3==0) *sc++=' ';   //我改成这样也不行。。。 *sc=*s; sc++; s++;  i++; }  *sc='\0'; } 算了  在你代码上直接改吧， 有两个错误点，一个是i对4取模，这会导致每隔4字符才会添加一个空格；二是你赋空格时没对指向目标数组的指针加加，导致拷贝下一个字符时空格被覆盖 我用的是 i=1; 怎么可能每隔4个字符加一个空格呢？[/quote] 跑一下试试， 因为从1到4需要3次循环，但从4到8就需要四次了，之后每次i到8的倍数有需要四次循环

user: user-0
content: 引用 11 楼 akari10032 的回复:void stringcpy3(char s[],char sc[]){  int i=0;  while(*s){   if(i%3==0) *sc++=' ';   //我改成这样也不行。。。 *sc=*s; sc++; s++;  i++; }  *sc='\0'; } 算了  在你代码上直接改吧， 有两个错误点，一个是i对4取模，这会导致每隔4字符才会添加一个空格；二是你赋空格时没对指向目标数组的指针加加，导致拷贝下一个字符时空格被覆盖 引用 11 楼 akari10032 的回复:void stringcpy3(char s[],char sc[]){  int i=0;  while(*s){   if(i%3==0) *sc++=' ';   //我改成这样也不行。。。 *sc=*s; sc++; s++;  i++; }  *sc='\0'; } 算了  在你代码上直接改吧， 有两个错误点，一个是i对4取模，这会导致每隔4字符才会添加一个空格；二是你赋空格时没对指向目标数组的指针加加，导致拷贝下一个字符时空格被覆盖 我用的是 i=1; 怎么可能每隔4个字符加一个空格呢？

user: user-1
content: void stringcpy3(char s[],char sc[]){  int i=0;  while(*s){   if(i%3==0) *sc++=' ';   //我改成这样也不行。。。 *sc=*s; sc++; s++;  i++; }  *sc='\0'; } 算了  在你代码上直接改吧， 有两个错误点，一个是i对4取模，这会导致每隔4字符才会添加一个空格；二是你赋空格时没对指向目标数组的指针加加，导致拷贝下一个字符时空格被覆盖