首页 新闻 会员 周边

关于模仿c语言库函数strcpy的问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-11-20 20:49

看到有人这么写.

void str_cpy(char *array_Dec, char *array_Src)

{

  while (*array_ Dest++ = *array_Src++);

}

 

 

//就这么一句简单的话,  实在不理解

这个循环什么时候结束?

这句子的执行顺序是怎样的?

(*(array_ Dest++) = *(array_Src++)) ???

可我反反复复的想,这样也不对啊.诶....

望指点一二.在此感谢

sw90的主页 sw90 | 初学一级 | 园豆:84
提问于:2013-11-20 06:36
< >
分享
最佳答案
0

先从等号右边开始

1:array_Src指向原数组首地址

2:*array_Src 取出原数组首地址指向的变量

然后是等号左边

3:array_ Dest指向目的数组首地址

4:*获取目的数组首地址指向的变量

5:步骤2的获得的变量的值赋值给步骤4的值

6:array_ Dest++;array_Src++;指向的原数组和目的数组的指针向后偏移指向下一个地址。

7:循环直到array_Src指向的变量的值为字符‘\0',对应ASIC表为整数0循环退出

 这里我多说一点啦,原数组是直接赋予字符串就没问题。如果是挨个字符赋值就会因为没有结束符’\0'而导致循环出错。

这种的很容易不是你要的结果。例如这样

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
using namespace std;
void str_cpy(char *array_Dec, char *array_Src)
{ 
    while (*array_Dec++ = *array_Src++);
}
int _tmain(int argc, _TCHAR* argv[])
{
    char src[10];
    src[0]='0';
    src[1]='1';
    src[2]='2';
    char des[10];
    str_cpy(des,src);
    cout<<des;
    return 0;
}

 输出结果会有乱码

 函数或许改成这样好理解一点

void str_cpy(char *array_Dec, char *array_Src)
{ 
    while (*array_Src!='\0')
    {
        *array_Dec=*array_Src;
        array_Dec++;
        array_Src++;
    }
    *array_Dec=*array_Src;
}
收获园豆:10
大芝麻 | 初学一级 |园豆:4 | 2013-11-20 08:19

谢谢啊.也是优先级的问题吗?之前也因为同个问题想了老半天....

sw90 | 园豆:84 (初学一级) | 2013-11-20 12:27

@阿利是傻子: 优先级肯定重要了,不然看不懂

大芝麻 | 园豆:4 (初学一级) | 2013-11-20 13:17

@大芝麻: 谢谢前辈指教

sw90 | 园豆:84 (初学一级) | 2013-11-20 20:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册