LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 711|回复: 4

关于字符指针安全问题

[复制链接]
发表于 2003-7-2 08:31:48 | 显示全部楼层 |阅读模式
有下函数:
void foo(char *s)
        char *d;
        char *s1 = "akdjfaksjf;ksj;f;fjj";
        char *d1;

        d = s; // 1
        d1 = s1; // 2
        strcpy(d, s); // 3
        strcpy(d1, s1);// 4
}

请问:
1 2 3 4 安全吗? 如果 s, s1 指向的字符串太长, 指针 d, d1 怎么就知道同其它指针地址重叠呢?
这两种情况哪种更安全, 更快?
怎样才能保证指针 s, s1 的内容安全复制到 d, d1 呢?

一个初学者的 菜问 !
发表于 2003-7-2 09:14:31 | 显示全部楼层
如果要复制字符串,就用strcpy()。如果不想复制字符串,而是对原有字符串进行操作,只要得到字符串的地址就行了。char *s1 = "akdjfaksjf;ksj;f;fjj"之类的写法只能在指针初始化的时候使用。
发表于 2003-7-2 09:31:03 | 显示全部楼层
d=s;
d1=s1;
这两句没问题,是对指针进行赋值,现在d与d1分别和s及s1值同,指向相同的地址。所以接下来的strcpy就没有意义了。
如果把 d=s;d1=s1两语句注释掉,直接strcpy就变得不安全了,因为这两个字符指针并没有指向特定的内存空间。
实际上,最好的做法应该是为字符指针赋值的时候,先用strlen函数得到字符串的长度,然后用malloc分配指定长度的存储空间,然后再用strcpy进行字符串的拷贝,这样就是很安全的了。
发表于 2003-7-2 12:00:07 | 显示全部楼层
指针是可以随便赋值的,但是给他合法的值是你的责任。
 楼主| 发表于 2003-7-2 16:20:41 | 显示全部楼层
谢谢,明白一点了
strcpy 和赋值语句同时出现是为了说明两种情况的比较
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表