首页 > 试题广场 >

在上下文及头文件均正常的情况下,若有以下定义和语句,则输出结

[单选题]
在上下文及头文件均正常的情况下,若有以下定义和语句:
 char s1[] = "12345", *s2 = "1234";
 printf("%d\n", strlen(strcpy(s1, s2))); 
则输出结果是
  • 4
  • 5
  • 9
  • 10
推荐
strcpy(s1,s2)这个函数是把s2字符串拷贝到s1这个字符串,同时也把s2的 '\0' 拷过去,所以覆盖了s1的所有字符(在空间足够的情况下,当然遇到s1的空间不足以存放s2,另考虑),所以strcpy执行完后是“1234” strlen("1234")  就是4了
编辑于 2016-08-10 16:26:58 回复(15)
原型声明:char *strcpy(char* dest, const char *src);功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针
所以strlen计算的是s1的长度
sizeof(s1)=6
发表于 2015-08-15 19:48:20 回复(1)
a
编辑于 2015-07-27 09:30:23 回复(0)
参考:

1.  字符串最后以 \0 结束。strcpy将'1234\0'复制到目的地址

2.  strlen()遇到 \0 停止

发表于 2015-08-25 14:03:52 回复(2)
strlen(str)求字符串的长度,遇到\0是结束计算,不算 \0,且从1开始计数。 1234\0所以长度为4.
发表于 2016-12-03 11:32:37 回复(1)
举例说明:
char s1[]="1234567";
char s2[]="89";
经过strcpy(s1,s2);后,s1[]="89\04567";
strlen(s1)遇见\0结束
编辑于 2018-12-07 09:38:53 回复(2)
strcpy(s1,s2)这个函数是把s2字符串拷贝到s1这个字符串,分两种情况
1、s1的空间大于等于s2(结果:s2完全覆盖s1)
           理由: 此时把s2中的所有字符连同结尾的‘\0’ 也拷贝到s1中 。 在读取s1时,读到 ‘\0’ 时 便认为字符串结束。
2、s1的空间小于s2(结果:出错)
编辑于 2017-07-06 22:26:35 回复(0)
1、原型声明:char  *strcpy(char* dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
2、原型声明:  extern unsigned int strlen(char *s);
头文件:#include <string.h>
格式:strlen (字符数组名)
功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内
说明:返回s的长度,不包括结束符NULL。

编辑于 2016-11-14 20:43:37 回复(0)
strlen是计算字符串的长度
strcpy(s1,s2)是将s2复制给s1,将字符串覆盖,但是不改变原数组长度
编辑于 2015-09-24 19:02:54 回复(0)
答案是 A
strcpy返回值 就是s1运行时先执行strcpy 再执行strlen,strcpy执行完 s1变了,是"1234",再求长度是4。
 
编辑于 2016-08-10 16:26:58 回复(2)

strcpy(s1,s2)这个函数是把s2字符串拷贝到s1这个字符串,同时也把s2的 '\0' 拷过去,所以覆盖了s1的所有字符

发表于 2021-06-06 16:10:36 回复(0)
s1和s2的长度都是5,不过复制到s1的时候s2最后一个\0不会复制,所以长度为4
发表于 2017-04-17 15:09:31 回复(0)

1.  strcpy将'1234\0'复制到目的地址

2.  strlen()遇到  \0  停止

发表于 2016-07-27 23:44:21 回复(0)
strcpy(s1,s2);strcpy函数的意思是:把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy.
发表于 2016-06-22 11:29:44 回复(0)
strcpy将s2复制到s1中。包括\0 strlen计算字符长度。 1234\0遇\0停止,但不计算\0 共4个
发表于 2022-10-19 22:45:28 回复(0)
虽然说这个位置说 sizeof = 4,但是你要知道实际的底层逻辑,见如下代码:
    char s1[] = "123456",a[]= "1234";
    char* s2 = a;
    
    strcpy(s1, s2);
       cout << sizeof(s1);  //此时输出是 4
虽然此时输出的结果 4,但是你要知道 真正的s1的内部是  s1[ ] = {' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' \0 ' , ' 6 '}
发表于 2022-03-05 19:53:04 回复(0)
这种题目出现在前端开发就离谱!
发表于 2022-02-15 15:21:55 回复(0)
strlen(str)求字符串的长度,遇到\0是结束计算,不算 \0,且从1开始计数。 1234\0所以长度为4。而sizeof是计算已分配的空间,会把\0也计算进去。
发表于 2022-01-17 15:42:09 回复(0)
strcpy(s1 ,s2) ;将 s2的结束字符 '\0' 拷贝到 s1 中 strlen() 是以'\0' 作为结尾的。
发表于 2020-06-05 11:52:39 回复(0)
  • 1 - strcpy(s1,s2):s2字符串拷贝到s1这个字符串,同时也把s2的 '\0' 拷过去,所以覆盖了s1的所有字符。
    (在空间足够的情况下,当然遇到s1的空间不足以存放s2,另考虑),所以strcpy执行完后是“1234” strlen("1234") 就是4了

  • 2 - strlen()函数:计算指定字符串 str 的长度,但不包括结束字符,遇到\0是结束计算,不算 \0,且从1开始计数。

    sizeof():是一个单目运算符,计算包括结束字符在内的长度。

编辑于 2019-05-20 11:24:12 回复(0)
strcpy复制后s1 = "1234\0\0";strlen(s1)结果为4
发表于 2017-05-22 10:44:48 回复(0)