初级问题,这两个有什么差别?

wula0010 2015-02-16 12:01:54

char c1[20]="aaaaaaaaaaaaaaaaa",c2[10]="bbbb";
strcat_s(c1,c2);

这个会报错,



char c1[20]="aaaaaaaaaaaaaaaaa",c2[10]="bbbb";
strcat_s(c1,20,c2);

这个也会报错,


char c1[30]="aaaaaaaaaaaaaaaaa",c2[10]="bbbb";
strcat_s(c1,c2);


char c1[30]="aaaaaaaaaaaaaaaaa",c2[10]="bbbb";
strcat_s(c1,30,c2);

这两个都不会报错,那么这两个的用法,有什么差别?有什么好坏?为什么要两个方法?一个不是一样的么?
...全文
212 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wula0010 2015-02-25
  • 打赏
  • 举报
回复
引用 6 楼 fly_dragon_fly 的回复:
[quote=引用 2 楼 wula0010 的回复:] [quote=引用 1 楼 fly_dragon_fly 的回复:] strcat_s(c1,c2); 第一参数必须是数组 strcat_s(c1,30,c2); 1,3参数都是指针
char c1[20]="aaaaaaaaaaaaaaaaa",那你能告诉我,c1是数组还是指针? 你能给我举个例子,能用第一个,不能用第二个的么?或者能用第二个,不能用第一个的也行...................................[/quote] c1 作为数组还是指针看调用,数组转指针是隐式,所以满足第一个,第二个肯定可以,反过来不行以你的例子 const char *p1=c1,const char *p2 =c2; 你调用strcat_s(p1,p2) 能成功吗[/quote] 这个回答比较满意,应该是正确的...........
灰龙001 2015-02-20
  • 打赏
  • 举报
回复
有2个函数主要的目的是可以少写代码,而且strcat_s(char s1[], const char* s2)中的s1数组的长度编译时自动填写,不出存在填写错误长度的问题
灰龙001 2015-02-20
  • 打赏
  • 举报
回复
这2个函数是一样的功能,因为strcat_s(char s1[], const char* s2),内部调用的是strcat_s(char* s1, int size, const char* s2)
Sandrer 2015-02-18
  • 打赏
  • 举报
回复
发生错误是正常的,因为你越界操作了 如果使用不带 _s 的函数,则越界操作不会立即报错,一般会在释放内存时报越界错误 如果该段内存是全局使用的后果更加严重,你可能连错误在哪发生的都找不到 使用带 _s 的函数,一般都要在 try(或 __try) 块中使用 而且为了保证不影响程序的正常流程,你还必须处理该错误
cxs812747475 2015-02-18
  • 打赏
  • 举报
回复
strcat_s 和 strcat 的区别 strcat_s是VS2005及以后新增的具有更强"安全性"的CRT函数。 示例 如: char szBuf[3]={0}; 1> strcat_s(szBuf,3,"kdfdfj"); 2> strcat(szBuf,"kdfdfj"); 对于这两个例句,你仔细看就会发现他们有缓冲区溢出的问题. 而用第一个函数则不同,它会抛出一个异常。 但使用第二个函数的结果则不能确定,因为它可能会错误地改变了程序中其他部分的内存的数据,有可能不会抛出异常,但会导致程序数据错误,也可能由于非法内存访问抛出异常
fly_dragon_fly 2015-02-17
  • 打赏
  • 举报
回复
引用 2 楼 wula0010 的回复:
[quote=引用 1 楼 fly_dragon_fly 的回复:] strcat_s(c1,c2); 第一参数必须是数组 strcat_s(c1,30,c2); 1,3参数都是指针
char c1[20]="aaaaaaaaaaaaaaaaa",那你能告诉我,c1是数组还是指针? 你能给我举个例子,能用第一个,不能用第二个的么?或者能用第二个,不能用第一个的也行...................................[/quote] c1 作为数组还是指针看调用,数组转指针是隐式,所以满足第一个,第二个肯定可以,反过来不行以你的例子 const char *p1=c1,const char *p2 =c2; 你调用strcat_s(p1,p2) 能成功吗
wula0010 2015-02-17
  • 打赏
  • 举报
回复
楼上的两个连我什么意思都没弄明白,...................................... 我不是让你们来找错的,我是要比较两个的差别.......................................
黎前点星 2015-02-17
  • 打赏
  • 举报
回复
我想表达的是,CSDN里弄分数貌似也太难了吧
fly_dragon_fly 2015-02-16
  • 打赏
  • 举报
回复
strcat_s(c1,c2); 第一参数必须是数组 strcat_s(c1,30,c2); 1,3参数都是指针
starnight_cyber 2015-02-16
  • 打赏
  • 举报
回复
引用 3 楼 hanyue03 的回复:

2
 
char c1[20]="aaaaaaaaaaaaaaaaa",c2[10]="bbbb"; 
strcat_s(c1,20,c2); 
 
char c1[20]; 17个a在加4个b 超出了c1的范围了
楼主请看三楼 另外补充一点,像这种形式,char c1[20]="aaaaaaaaaaaaaaaaa",存放在数组中还应该包括'\0',共占用18个字符的空间。
hanyue03 2015-02-16
  • 打赏
  • 举报
回复

2
 
char c1[20]="aaaaaaaaaaaaaaaaa",c2[10]="bbbb"; 
strcat_s(c1,20,c2); 
 
char c1[20]; 17个a在加4个b 超出了c1的范围了
wula0010 2015-02-16
  • 打赏
  • 举报
回复
引用 1 楼 fly_dragon_fly 的回复:
strcat_s(c1,c2); 第一参数必须是数组 strcat_s(c1,30,c2); 1,3参数都是指针
char c1[20]="aaaaaaaaaaaaaaaaa",那你能告诉我,c1是数组还是指针? 你能给我举个例子,能用第一个,不能用第二个的么?或者能用第二个,不能用第一个的也行...................................

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧