【发布时间】:2020-10-11 09:15:52
【问题描述】:
据此:
strcpy vs strdup,
strcpy 可以用一个循环来实现,他们使用了这个while(*ptr2++ = *ptr1++)。我尝试过类似的操作:
#include <stdio.h>
#include <stdlib.h>
int main(){
char *des = malloc(10);
for(char *src="abcdef\0";(*des++ = *src++););
printf("%s\n",des);
}
但这什么也没打印,也没有错误。出了什么问题?
非常感谢您的回答,我玩了一点,并决定如何最好地设计循环以查看复制是如何逐字节进行的。这似乎是最好的:
#include <stdio.h>
#include <stdlib.h>
int main(){
char *des = malloc(7);
for(char *src="abcdef", *p=des; (*p++=*src++); printf("%s\n",des));
}
【问题讨论】:
-
从中学到一些东西:将所有这些操作不必要地塞进一行代码使您无法理解实际发生的情况。看到你可以在一行中塞进多少代码并没有什么收获。
-
@AndrewHenle 所以你曾经以一种不常见的方式看到
for loop的用法并称之为填鸭式?for loop是所有编程中非常基本的概念,c 具有以任何你喜欢的方式使用它的优势。我以与您习惯的for(int i =0;i<10;i++)不同的方式使用它,但这只是我的偏好。 -
@milanHrabos 作为一个非常初学者,你的意见有点太强烈了。您的代码难以阅读,有经验的程序员更喜欢写更多的行而不是“压缩”到这种怪物中。
-
@milanHrabos 你不得不问这个问题,因为那一行代码太复杂了,你无法弄清楚。故事结局。 “代码简洁”是货物狂热的 BS,它导致了一些问题,使您无法理解您的代码在做什么。有一整套经过同行评审的研究证明人类的大脑只能同时跟踪少数几个单独的状态 - 这个数字通常从 3 到 6 不等或 7 件事。
(*des++ = *src++)循环中的(*des++ = *src++)部分同时发生 6 件事。是的 - 你塞得太多了。 -
你可以从中学习,或者你可以继续用头撞砖墙,试图理解一行代码太多。您的选择。