为了账号安全,请及时绑定邮箱和手机立即绑定

萌新第一次提问实在是看不懂了

例子中这个char s1[10]="hello";中s1[10]是什么意思

还有什么叫strcat在使用时s1和s2内存不能一样,实在是看不懂了

正在回答

2 回答

咋是把s1指向的第一个内容复制到s2的末尾呢?不应该是把s2中的字符串复制到s1中吗?

0 回复 有任何疑惑可以回复我~
char s1[10] = "hello";

表示在内存中申请能放10个char类型的空间,并给这个空间附初始值“hello\n”('\n'表示字符串的结尾,占一个char空间)。s1的总大小是10,现在占用了6个空间,还剩4个空间。

strcat(s1,s2);

是把s2的内容往s1后面加,直到s2遇到'\n'字符,所以需要s1有足够多的空间。如果s1和s2内存一样,那就相当于一个字符串往自己后面加内容,举个例子,s1和s2内存一样,都是指向内容为“abcd\n”的内存,那么strcat的运行过程如下:

第一步:将s1指向的第一个内容复制到s2的末尾,也就是将‘a’复制到‘d’后面,结果为“abcda”,再判断s1指向的第一个内容是否为‘\n’,是则结束,否则s1和s2都往后一个指;这里是否,所以进行下一步;

第二步:将s1指向的第一个内容复制到s2的末尾,也就是将‘b’复制到第二个‘a’后面,结果为“abcdab”,再判断s1指向的第一个内容是否为‘\n’,是则结束,否则s1和s2都往后一个指;这里是否,所以进行下一步;

第三步:将s1指向的第一个内容复制到s2的末尾,也就是将‘c’复制到第二个‘b’后面,结果为“abcdabc”,再判断s1指向的第一个内容是否为‘\n’,是则结束,否则s1和s2都往后一个指;这里是否,所以进行下一步;

第四步:将s1指向的第一个内容复制到s2的末尾,也就是将‘d’复制到第二个‘c’后面,结果为“abcdabcd”,再判断s1指向的第一个内容是否为‘\n’,是则结束,否则s1和s2都往后一个指;这里是否,所以进行下一步;

第五步:将s1指向的第一个内容复制到s2的末尾,也就是将第二个‘a’复制到第二个‘d’后面,结果为“abcdabcda”,再判断s1指向的第一个内容是否为‘\n’,是则结束,否则s1和s2都往后一个指;这里是否,所以进行下一步;

。。。。。。

会发现,s1的第一个内容永远不会是‘\n’(结束符),所以就这样一直死循环下去了。(这里的s1和s2在实际代码中会换成工作指针,这里为了更明了,就不替换为工作指针了)

0 回复 有任何疑惑可以回复我~
#1

白腿小隼熊猫鸟

字符串结尾是'\0'
2019-02-22 回复 有任何疑惑可以回复我~
#2

Howard229 回复 白腿小隼熊猫鸟

是的,多谢指正
2019-02-27 回复 有任何疑惑可以回复我~
#3

苏洋哈哈

\n是什么鬼?
2019-12-27 回复 有任何疑惑可以回复我~
#4

苏洋哈哈

咋是把s1指向的第一个内容复制到s2的末尾呢?不应该是把s2中的字符串复制到s1中吗?
2019-12-27 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
C语言入门
  • 参与学习       926020    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

萌新第一次提问实在是看不懂了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信