当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于strcat,看上去错误却得到了正确结果,谁帮忙解释一下
帖子发表于 : 2007-03-29 21:24 
头像

注册: 2005-12-25 20:16
帖子: 228
送出感谢: 0 次
接收感谢: 0 次
代码:
#include <iostream>
#include <string>

using namespace std;

int main()
{
   char *str1="567";
   char str2[5]="1234";

   strcat(str2, str1);
   strcat(str2, "abcdefghijklmn");

   cout << str2;
}


以上代码只是测试,有点乱,但能编译通过(Sorry,在MinGW上试的),结果也对,只是str2定义的这么小没问题吗,是不是有所谓的溢出的问题? 如果str2定义为str1一样的指针型,则编译没问题,运行出错。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-03-29 22:16 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
g++试了下,不行。没错只能说明你rp不错。


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-03-30 20:01 
头像

注册: 2006-10-07 15:17
帖子: 215
送出感谢: 0 次
接收感谢: 0 次
不可能正确吧


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-03-30 22:32 
头像

注册: 2006-12-02 12:25
帖子: 689
送出感谢: 0 次
接收感谢: 0 次
这样还会正确?神奇


_________________
Titainium


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-05-09 15:46 

注册: 2007-04-30 13:09
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
int main()
{
char *str1="567";
char str2[5]="1234";

strcat(str2, str1);
strcat(str2, "abcdefghijklmn");

printf("%s", str2); //修改过
}

编译是否通过就看你的编译器是否对越界进行检查了。我用gcc 4. 1 . .2是编译通过的。
运行是否正确就看strcat操作后,str2后溢出的内存空间是否占用了该程序没有使用过的内存,
如果溢出的内存影响程序的运行就会报错,否则程序就可以正常运行。

//
如果str2定义为str1一样的指针型,则编译没问题,运行出错。

char* str2="1234";
这里str2的空间是分配在静态数据区,空间在编译时就分配好,大小固定。
如果执行strcat肯定没有空间存放其他数据。


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-05-11 22:02 

注册: 2006-11-15 18:35
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
编译应该可以通过,但是运行时应该有个segment fault之类的错误


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译