代码提交出现错误运行没问题 ?

goforitsean 2017-04-03 03:48:13
如图是在leetcode 上运行的 结果正确就是出现红色字体。
请问下 是什么原因恩。
...全文
803 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
abc00000001 2017-04-15
  • 打赏
  • 举报
回复
sizeof 不适用于运行期求值,它是个预编译宏,在预编译阶段就会被编译器完成,得到的是一个常量。而你却想在运行期中动态传参使用,这超出了sizeof宏的本身的定义。 length=sizeof(s)/sizeof(s[0]), 你打印一下,会发现 length 是个常量(4=4/1)。因为sizeof(s)/sizeof(s[0]) 的本意是返回数据的个数,只能是一个常量,在编译时就被4 给取代了。 你要这么用才对: char s[1024]; length=sizeof(s)/sizeof(s[0]); //length ==1024 相当于 length = 1024;
goforitsean 2017-04-10
  • 打赏
  • 举报
回复
谢谢! c学没多久, 在学习过程中。 是您说的这样的 但是那个红色字体的 error message 是什么原因呢?
引用 2 楼 twintiger 的回复:
length=sizeof(s)/sizeof(s[0])这句话有问题。 s是个char *,也就是地址,因此sizeof(s)就是地址的长度,也就是机器的位长,比如32位机,sizeof(char *)=4,和s[]是有区别的。 因此你的length想得到字符串的长度是有问题的,直接用length=strlen(s)不就结了?
twintiger 2017-04-07
  • 打赏
  • 举报
回复
length=sizeof(s)/sizeof(s[0])这句话有问题。 s是个char *,也就是地址,因此sizeof(s)就是地址的长度,也就是机器的位长,比如32位机,sizeof(char *)=4,和s[]是有区别的。 因此你的length想得到字符串的长度是有问题的,直接用length=strlen(s)不就结了?
codingMozart 2017-04-03
  • 打赏
  • 举报
回复
数组越界了吧

4,437

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧