- 主题:请教一个字符串的问题
谢谢您的解释,很清楚!
【 在 a9udn9u 的大作中提到: 】
: 太久没碰C了可能说得不对,C的内存安全检查特别松散,你这个应该是正好‘5’后面的那块内存值是0,所以printf打印到‘5’之后遇到0就结束了(strlen也是找0)。但是a并不拥有‘5’后面的0占用的内存单元,所以sizeof返回5,你再申请内存的时候,那个内存单元可能会分配给别的变量并且重新赋值,再打印就不会在‘5’那里结束了。
:
--
FROM 39.144.38.*
对
【 在 floppyking 的大作中提到: 】
: C语言是不是从a[0]开始?
--
FROM 39.144.38.*
现在仍是大学入学后的首门编程语言课,实际用得也不少吧!
【 在 operater 的大作中提到: 】
: “12345”的后面恰好是'\0'
: (我穿越回10年前了吗?现在用c的人不多了。解答的机会不多了。)
:
--
FROM 39.144.38.*
内存是怎么查看的?dev-c能看吗?
【 在 Ksharp 的大作中提到: 】
: 刚才试了一下 在我电脑的编译器上 sizeof是字符数组的长度,不管是大于还是小于5 都可以输出定义的长度值
: 而strlen有的时候输出6了
: 我打印后面内存看了一下,当后面一个值是5 asc对照表是不可显示控制字符 请求ENQ的时候 strlen是可以输出5的, 估计跟strlen的实现有关吧。。
: ...................
--
FROM 39.144.38.*
底层代码用C的挺多
【 在 shouge111 的大作中提到: 】
: 现在仍是大学入学后的首门编程语言课,实际用得也不少吧!
--
FROM 120.237.18.*
for (int k=0;k<7;k++){
printf("%#x %c\n",a+k,*(a+k));
}
把%c换成%d 可以对照ASC码表看看。。
【 在 shouge111 的大作中提到: 】
: 内存是怎么查看的?dev-c能看吗?
--
FROM 182.204.63.*
好,多谢!
【 在 Ksharp 的大作中提到: 】
: for (int k=0;k<7;k++){
: printf("%#x %c\n",a+k,*(a+k));
: }
: ...................
--
FROM 39.144.38.*
原因很简单,一般内存是4字节或者8字节对齐的,你申请了5个空间,实际可能给你的是8个空间。一般情况下你存储8个字符是没问题的。也就是说字符串的话是7个字符串加\0,如果你打印第9个就知道了。
--
FROM 221.218.142.*
后面一位空间没被占用而已
--
FROM 222.128.24.*
如果一直没遇到0内存值,后边的都会打印出来吗?
【 在 a9udn9u 的大作中提到: 】
: 太久没碰C了可能说得不对,C的内存安全检查特别松散,你这个应该是正好‘5’后面的那块内存值是0,所以printf打印到‘5’之后遇到0就结束了(strlen也是找0)。但是a并不拥有‘5’后面的0占用的内存单元,所以sizeof返回5,你再申请内存的时候,那个内存单元可能会分配给别的变量并且重新赋值,再打印就不会在‘5’那里结束了。
:
--
FROM 36.154.175.*