C语言问题。数组字符串长度问题。我写的对不对啊,分为实际长度和函数计算长度。
3个回答
展开全部
char s[10]="abc"; //实际占用10个字节,strlen计算长度为3,正确
char s[]="abc"; //实际占用4个字节,strlen计算长度为3,正确
char s[10]={'a','b','c'}; //实际占用10个字节,strlen计算长度为3,正确
char s[]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值),不是3,因为这个只明确了s是一个有三个元素的字符数组,第四个元素已经是非法空间了。
char s[3]="abc"; //编译通不过,因为"abc"需要4个字节,而s[3]只有3个字节的空间。
char s[3]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值)
char s[]="abc"; //实际占用4个字节,strlen计算长度为3,正确
char s[10]={'a','b','c'}; //实际占用10个字节,strlen计算长度为3,正确
char s[]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值),不是3,因为这个只明确了s是一个有三个元素的字符数组,第四个元素已经是非法空间了。
char s[3]="abc"; //编译通不过,因为"abc"需要4个字节,而s[3]只有3个字节的空间。
char s[3]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值)
更多追问追答
追问
说的太好了。可是我觉得倒数第二个能通过,只是不能当做字符串数组使用
好吧,确实会编译出错
展开全部
有一些错误
s[3]="abc";这样是编不过的 超出界限 有一个\0没地放
另外 我不知道你函数 你是怎么处理的 但如果只是简单的 传入s然后用sizeof的话 那结果肯定是指针长度 32位系统下 值是4 所有都是 不论你 定义多长 赋多少值 如果是用strlen的话 那就和你的结果相同了
s[3]="abc";这样是编不过的 超出界限 有一个\0没地放
另外 我不知道你函数 你是怎么处理的 但如果只是简单的 传入s然后用sizeof的话 那结果肯定是指针长度 32位系统下 值是4 所有都是 不论你 定义多长 赋多少值 如果是用strlen的话 那就和你的结果相同了
追问
VC环境下不报错,用strlen函数
追答
这都不报错 我不知道你的是什么情况 但最好不要这样搞 毕竟大家都知道 "abc"这是个 const
char[4] 我在VS下试了 是会报错的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询