C语言 比较 strcpy() 的两个实现



我有两个函数做同样的事情(strcpy()函数):

第一次实现:

void strcpy(char* des_str, const char* src_str) 
{ 
   int j = 0; 
   while ((dest_str[j] = src_str[j])!= '')) 
   j++; 
}

第二次实现:

void strcpy(char* des_str, const char* src_str) 
{ 
   while ((*dest_str = *src_str)!= '')) 
   { 
      src_str++;
      dest_str++; 
   } 
} 

C程序员通常更喜欢哪种风格/实现?"阵列"方法还是"指针"方法?除了"美学"差异之外,两种实现之间是否存在其他差异?

我敢打赌,生成的机器代码对于两者来说是完全相同的。(优化)

因此,这只是可读性问题:使用您和您的团队最熟悉的版本。这里最重要的是,当任何程序员看到这个源代码时,他/她不必浪费时间思考这个函数的作用。

正如Didier所指定的,机器生成的代码看起来是一样的,在这种情况下的性能也会是一样的。但是,我建议

1)使用strncpy而不是strcpy。 strncpy(des, src, noOfcharToCopy);

2)最好从SRC结束复制到DES结束,而不是从头开始; BCZ 考虑情况,如果 SRC 从地址 105 开始,它的大小为 10,DES 从 地址 100 则 SRC 数据将在地址 105 处覆盖 DES 上。 它说"DES"应该比SRC具有真正的价值。

这取决于我会说的程序员。主要区别在于,在第一个实现中,您创建一个新变量并仅修改此变量,在第二个实现中,您修改两个现有变量。这是一个大小与速度的问题(但规模要小得多)

第一个实现,即数组实现是正确的和首选的。但这取决于程序员。最佳做法是不要更改/更改指针,即 起始/基址应保留,不应递增或递减。

我所知,这个更常见:

void strcpy(char* des_str, const char* src_str) 
{ 
  while ((*dest_str = *src_str)!= '')) 
  { 
    src_str++;
    dest_str++; 
  } 
} 

我只能假设,因为它不需要分配任何内存(int)虽然更准确地说,我认为它通常实现为

++src_str
++dest_str

因为后缀增量必须创建一个新的 int 以用作"以前的值",然后再增加

最新更新