据我研究几篇面经来说,这是一道比较经典的题。
然后我找到了这个资料
C Programming/string.h/strcpy
发现了一个炫技的写法
char *mystrcpy(char *dest, const char *src)
{
char *save = dest;
while (*dest++ = *src++);
return save;
}
首先说明一点,strcpy返回值是char* 而不是void。虽然大部分人都是拿它当void用。
如果是void,那么只需要一行。
while (*dest++ = *src++);
理解这个倒也不难了。
就是把src赋值给dest
然后里面的表达式是赋值过后的*dest, 当*dest == ‘\0’时,就退出while.
不过例子中给出的这段代码
char *str1 = "abcdefghijklmnop";
char *str2 = malloc(100); /* must be large enough to hold the string! */
strcpy(str2, str1); /* str2 is now "abcdefghijklmnop" */
str2[0] = 'A'; /* str2 is now "Abcdefghijklmnop" */
/* str1 is still "abcdefghijklmnop" */
现在直接用g++已经不能编译了。
因为malloc(100)返回的时void, 估计旧版可以隐式转换,但是现在必须显示转换。
改成这样
char *str2 = static_cast<char*>(malloc(50));
就可以顺利编译了。
1694

被折叠的 条评论
为什么被折叠?



