1 回答
TA贡献883条经验 获得超454个赞
这题目又错了!
准确的答案是:这代码的结果是未定义的。 实际上,这段代码在运行时极有可能会崩溃。
原因就出在 strcpy(s1, s2) 这里,这个函数会把 s2 所指的字符串(包括结尾的null字符)复制到 s1 所指的字符串中。
但这题目的 s1 所指的是字符串字面量,字符串字面量是不可修改的!按 C 标准的说法,就是“修改它的行为是未定义的”。实践中,试图修改字符串字面量有极大的可能引起程序崩溃,所以这段代码不会有任何结果。
我都不想再吐槽了...
其实呢,我明白这题目要考察的知识点是什么。 干脆我把题目修改成正确的吧,然后再讲下结果是啥。
既然题目错在 s1 指向不可修改的字符串了,那就修改成这样: char s1[] = "12345" 这样 s1 就是字符数组了,这次再修改 s1 的内容就没问题了。
那么题目要考的是什么呢? 就是 strcpy 这个函数会把 s2 所指的字符串全部复制过来——包括结尾的null字符——题目想考的点。 还有就是 strcpy 会返回 s1。
s1 中本来有 6 个字符: 1 2 3 4 5 '\0'
strcpy 之后,s1 的内容成了:1 2 3 4 '\0' '\0' 也就是原本的 5 被从 s2 中过来的 null 字符替换了。
strlen 是用来计算字符串中字符个数的函数。参数是字符指针,当然它必须指向某字符串中。函数计算字符个数的方法就是:从参数所指的字符串的位置开始向后数,直到遇到 null 字符,并且 null 字符不计算在内——题目想考的也有这个。
这样 strlen(s1) 最终结果是 4。
- 1 回答
- 1 关注
- 1381 浏览
添加回答
举报