免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hjs6142
打印 上一主题 下一主题

请问sizeof 与strlen的区别? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2003-06-03 15:08 |只看该作者

请问sizeof 与strlen的区别?

楼主的问题和使用sizeof和strlen没有关系,你定义了一个局部变量,在第五行,没有使用j,编译器认为你没有使用了,就不会保留j的值。但是你用全局变量,编译器就不会改变你的j的值了。这是和编译器的优化相关的。不知道我说的对吗?

sizeofs是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
void * memset(void * s,int c,sizeof(s)) 可以这样用计算数组的大小。

strlen只是判断一个字符串的长度(字符串以\0结尾)。
不知道我说明白了吗?

论坛徽章:
0
22 [报告]
发表于 2003-06-03 15:43 |只看该作者

请问sizeof 与strlen的区别?

楼上的说的不对。j没说对,sizeof也没说对。

论坛徽章:
0
23 [报告]
发表于 2003-06-03 16:50 |只看该作者

请问sizeof 与strlen的区别?

原帖由 "无双" 发表:
strlen(s1));??????
应该是sizeof吧
   

如果s1定义为:char s1[10] = {1,2,3,4};
这样用memcpy(s2,s1,sizeof(s1));不合适吧。

论坛徽章:
0
24 [报告]
发表于 2003-06-03 16:52 |只看该作者

请问sizeof 与strlen的区别?

[quote]原帖由 "fieryfox"]楼上的说的不对。j没说对,sizeof也没说对。[/quote 发表:
     

大哥,能说说你的见解吗?

论坛徽章:
0
25 [报告]
发表于 2003-06-03 17:15 |只看该作者

请问sizeof 与strlen的区别?

原帖由 "hjs6142" 发表:
我用的编译器下面两种情况:
char s1[4] = {1,2,3,4};
char s2[10];

memcpy(s2,s1,strlen(s1));与memcpy(&s2,&s1,strlen(&s1))
的结果都一样!我真的也一头雾水,也许它把&s1当成&s1[0]了,我是这么理解的。
   

这是巧合!
这么说吧:
如果定义:char str[n]
那么:sizeof str等于n
sizeof &str等于4
你的s1有4个元素,也就是当n=4的时候当然恰好一样了。

当str是数组名的时候,编译器把&str理解为&str[0]
所以结果恰好一样。

所以,程序的结果正确不代表逻辑正确。该怎么写就怎么写,不要使用太多的tricky,否则连你自己都会糊涂的。

论坛徽章:
0
26 [报告]
发表于 2003-06-03 17:15 |只看该作者

请问sizeof 与strlen的区别?

1、j的值不会因编译器的优化而改变。
2、sizeof是编译器处理的,编译时计算。++、--等是运行时计算。

论坛徽章:
0
27 [报告]
发表于 2003-06-03 17:34 |只看该作者

请问sizeof 与strlen的区别?

原帖由 "JohnBull"]如果定义:char str[n 发表:

那么:sizeof str等于n
sizeof &str等于4
你的s1有4个元素,也就是当n=4的时候当然恰好一样了。

当str是数组名的时候,编译器把&str理解为&str[0]
所以结果恰好一样。
  

在我的编译器上确实无论str[n]中n等于多少,sizeof(s1)与sizeof(&s1)的结果都是一样的,这就是你所说的:当str是数组名的时候,编译器把&str理解为&str[0]
所以结果恰好一样。

这个就不用再争议了。

论坛徽章:
0
28 [报告]
发表于 2003-06-03 17:47 |只看该作者

请问sizeof 与strlen的区别?

原帖由 "fieryfox" 发表:
1、j的值不会因编译器的优化而改变。
2、sizeof是编译器处理的,编译时计算。++、--等是运行时计算。
   


我认为你说的没错,但zhanggz说的也没错,我在单步跟踪程序运行时切实碰到过zhanggz所说的问题。

论坛徽章:
0
29 [报告]
发表于 2003-06-03 17:50 |只看该作者

请问sizeof 与strlen的区别?

请大家说说下面的值各是多少:
unsigned char s1[] = {
"<html>;\r\n"
"</html>;\r\n"
};

(1)sizeof(s1) = ?
(2)strlen(s1) = ?

谢谢!

论坛徽章:
0
30 [报告]
发表于 2003-06-03 18:32 |只看该作者

请问sizeof 与strlen的区别?

我知道如果:
char    str1[10];

sprintf(str1, "%s", "hello";
那么:
      sizeof(str1)=10;
      strlen(str1)=5;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP