【发布时间】:2019-01-13 10:30:48
【问题描述】:
无法弄清楚为什么我从这段代码中得到了这个输出。
#include<stdio.h>
#include<string.h>
int main()
{
char str[] = "I live in NY city";
printf("%s%s\n","The string in array str[] before invokihg the function memmove(): ",str);
printf("%s%s\n","The string in array str[] before invokihg the function memmove(): ",memmove(str,&str[7],10));
return 0;
}
我的输出是:in NY cityNY city
那不应该是:in NY city i live ??
这是我书中的类似示例,它很有意义。
#include<stdio.h>
#include<string.h>
int main()
{
char x[] = "Home Sweet Home";
printf("%s%s\n","The string in array x[] before invoking the function memmove(): ",x);
printf("%s%s\n","The string in array x[] before invoking the function memmove(): ",memmove(x,&x[5],10));
return 0;
}
这里的输出是:Sweet Home Home
根据memmove()函数的定义是对的,即从其第二个参数指向的对象中复制指定数量的字节到其第一个参数指向的对象中。(使用相同的字符串)这里的对象也是指到一个数据块。
【问题讨论】:
-
"这不应该是:我住在纽约市吗??"" 不。如何将“我住”部分移到字符串的末尾?
-
我认为你书中的例子不是很好,因为你看不出第一个“家”消失了,第二个“家”被复制了。
-
@molbdnilo 是的,定义不是那么简单和令人困惑的例子让我理解错误这个函数。无论如何,它是 H.M.Deitel 的 C How To program 第 4 版
-
说到书,你们可以推荐一些 C++ 的书吗?不适合初学者,也不适合高级程序员。 Smth 之间,有更多的例子和实践练习。我的请求的关键字是 PRACTICE、GOOD PRACTICAL Examples、PLAIN ENGLISH。
-
@Stanley 推荐的“半官方”stackoverflow C++ 书籍是here。