meltemi 发表于 2018-3-22 18:21:44

C虐我千百遍啊,求助strcpy在这里的用法

源程序是:
#include <stdio.h>
#include <string.h>
main()
{
        int i;
        char a[] = "How are you!";
        for (i = 0; a; i++)
                if (a == ' ')
                        strcpy(a, &a);
        printf("%s\n", a);
}

求大神讲讲这段代码,strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符,这里又结合了数组。看不懂,扎心啊

风过无痕丶 发表于 2018-3-22 19:12:59

我给你模拟一遍循环把~

第一次: i = 0a = H   if不成立~
第二次: i = 1a = o   if不成立~
第三次: i = 2a = wif不成立~
第四次i = 3a = ' 'if成立   strcpy把参数二的地址给参数一~简单说~ 就是现在的a数组的首地址不再是'H' 是 空格后面的一个~ 字符 'a'
接着循环~
第五次 i = 4a = y   if不成立
第六次 i = 5a = oif不成立
第七次i = 6   a = uif不成立
第八次i = 7   a = !   if不成立
第九次i = 8   a = '\0'   循环条件不成立,循环结束~

38299676 发表于 2018-3-22 19:49:04

风过无痕丶 发表于 2018-3-22 19:12
我给你模拟一遍循环把~

第一次: i = 0a = H   if不成立~


第四次是 字符串复制函数, 参数2地址开始的字符串 复制到参数1里 包括 \n 一起 复制

这时候 字符串数组S 里的 数据 就变成了are you!\n

风过无痕丶 发表于 2018-3-22 20:19:40

38299676 发表于 2018-3-22 19:49
第四次是 字符串复制函数, 参数2地址开始的字符串 复制到参数1里 包括 \n 一起 复制

这时候 字符串数 ...

{:10_245:}所以说我的回答有什么问题吗~我确实说的是第四次啊~还有 哪里来的s数组啊~

38299676 发表于 2018-3-22 21:16:52

本帖最后由 38299676 于 2018-3-22 21:23 编辑

风过无痕丶 发表于 2018-3-22 20:19
所以说我的回答有什么问题吗~我确实说的是第四次啊~还有 哪里来的s数组啊~

我说的第4次应该改成 复制 不是给地址 这时候 a[]里的值 变成了“are you!\n"
页: [1]
查看完整版本: C虐我千百遍啊,求助strcpy在这里的用法