为什么运行结果是are you!?我算得的结果为什么为什么是you!?到底哪错了?

img

第一次复制后字符串内容为are you!而此时i已经变为4了,而新字符串中的空格下标为3,所以不会再进行字符串复制了。

因为你复制之后,i没有清零,继续增加,后面没有空格了呀

应该是因为strcpy()函数复制字符串时,新的字符串"are you!"覆盖了原来的字符串的原因,注释如下:

#include <stdio.h>
#include <string.h>

int main(void){
    
    int i;
    char a[] = "How are you!";
    
    for(i=0;a[i];i++){
        // 当当前字符是空格时,则把空格后面的字符直到字符串结束都复制到字符数组开始 
        // 第一次遇到空格时,是在How单词后面-下标为3,然后把"are you!"复制到字符数组开始
        //然后再判断下一个字符时,即在下标为为4的字符开始,即字符'y',直到字符串结束再无空白字符
        //所以打印字符串结果时,就是 "are you!" 
        if(a[i]==' '){ 
            strcpy(a,&a[i+1]);
            //printf("i=%d,a=%s\n",i,a);
            
        }
    }
    printf("%s\n",a);
    
    return 0; 
} 

img