请教一个关于C函数memmove的问题(在线等待)
编写一个控制台程序,代码如下:
#include <string.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
char dest[] = "abcdefghijklmnopqrstuvwxyz0123456789";
char src[]= "******************************";
printf("destination prior to memmove: %s\n", &dest);
memmove(&dest, &src, 26);
printf("destination after memmove: %s\n", &dest);
return 0;
}
编译,连接,执行,一切正常。
如果将main()函数体的中的代码换为下面,
char *dest = "abcdefghijklmnopqrstuvwxyz0123456789";
char *src = "******************************";
printf("destination prior to memmove: %s\n", dest);
memmove(dest, src, 26);
printf("destination after memmove: %s\n", dest);
return 0;
编译,连接正常,但是执行时报错。
请问这是什么原因呢?期盼着您的指教!
问题点数:20、回复次数:4Top
1 楼microsoftwin(流星雨点)回复于 2003-06-01 20:49:02 得分 10
前一个例子变量是栈上的
后一个例子相当于常量,不能动的Top
2 楼jjggww2002(jjggww2002)回复于 2003-06-01 20:51:16 得分 0
再补充请教一个问题:
结构in_addr在msdn中的解释如下:
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
哪位老师能详细地解释一下这个结构的含义和使用方法?Top
3 楼jjggww2002(jjggww2002)回复于 2003-06-01 21:00:15 得分 0
哦,是不是说:
char *dest = "abcdefghijklmnopqrstuvwxyz0123456789"; 该语句定义了一个字符串常量,
而语句memmove(dest, src, 26); 复制字符串src中的26个字符到字符串dest中。因为字符串dest
是字符串常量,不能被改变,所以出错?Top
4 楼windbells(风铃)回复于 2003-06-01 22:03:53 得分 10
它是用联合来构造的这个结构,这样可以用多种方法来给这个结构的变量进行赋值。
例如。
in_addr ssin;
ssin.S_un.S_un_b.s_b1=192;
ssin.S_un.S_un_b.s_b2=168;
ssin.S_un.S_un_b.s_b3=0;
ssin.S_un.S_un_b.s_b4=1;
与
ssin.S_un.S_addr=inet_addr("192.168.0.1");
得到的结果是一样的
Top




