关于strcat函数的一个问题!这是怎么回事?

sunny南希 2009-11-12 09:45:05
#include<stdio.h>
#include<string.h>
char a[10];
char b[10];
char c[10];
strcpy(a,"abc");
strcpy(b,"def");
strcpy(c,"ghi");
printf("%s\n%s\n",strcat(a,b),strcat(a,c));

1,请问这个输出的结果为什么会是输出两次“abcghidef”?

printf("%s\n",strcat(a,b),strcat(a,c));

2如果是这样就是输出一次“abcghidef”?
...全文
260 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
亦枫Leonlew 2009-11-12
  • 打赏
  • 举报
回复
C语言函数参数入栈是从右向左,传参的时候会首先执行strcat(a,c),这时a已经是abcghi了,然后执行strcat(a,b)
结果当然是两个相同的字符串。
benbshmily 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xixiaoliu 的回复:]
你有两个 %s,当然两次了

你上面的 strcmp 应该是 strcpy 吧?

注意 strcat 会改变第一个参数,
strcat(a,c));执行完毕后,a 已经是  abcghi 了(返回 a 的地址)
再执行 strcat(a, b),a 是 abcghidef(返回 a 的地址)
最后两个 %s 会输出两次 a
[/Quote]
正解。
因为strcat返回的是字符串的地址,因此两个strcat返回的其实是同一地址。打印的时候都是打印的那个地址表示的字符串,所以打印出都是abcghidef。
云梦谭 2009-11-12
  • 打赏
  • 举报
回复
这和strcat()没关系。而是printf()的不定参数造成的。研究一下不定参数的机制就明白了。
xixiaoliu 2009-11-12
  • 打赏
  • 举报
回复
你有两个 %s,当然两次了

你上面的 strcmp 应该是 strcpy 吧?

注意 strcat 会改变第一个参数,
strcat(a,c));执行完毕后,a 已经是 abcghi 了(返回 a 的地址)
再执行 strcat(a, b),a 是 abcghidef(返回 a 的地址)
最后两个 %s 会输出两次 a
rendonglin2007 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yetyongjin 的回复:]
这和strcat()没关系。而是printf()的不定参数造成的。研究一下不定参数的机制就明白了。
[/Quote]
正确,确实是printf造成的,给你举个例子就明白了
int i = 0;
printf("%d\n%d", i++, ++i);
照你的意思结果是
0
2
其实结果是


pirntf是简单点说是从右往左读参数,这样就不难理解你程序的结果了
sunny南希 2009-11-12
  • 打赏
  • 举报
回复
为什么我再加一个%s,也不会输出三个a!后面明明是两个参数啊!加一个%s为什么两个参数会输出一个字符串而没有错误!两个strcat都是返回a的吗?

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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