2020-02-11 09:53发布
chengz 发表于 2014-11-29 11:53 没有数组越界检测,没有内存自动回收。。。。
wicy001 发表于 2014-11-29 13:35 数组的大小,和数组里存的数据个数,是两个不同的概念。 这种方法,只是针对你LZ位,说明用指针可以返回 ...
最多设置5个标签!
原来大家都喜欢 傻瓜式编程!
越界的事:我觉得可以在编译器上面动手脚,编译的时候知道,数组大小,data[100], 0-99 data[x] 如果x > 99 就跳过这一条指令。
函数退出来,你申请的动态内存就 释放了 ,但在PC上,free ,delete
char* ss = "0123456789";
sizeof( ss) 结果 4 ===》ss是指向字符串常量的字符指针
sizeof(*ss) 结果 1 ===》*ss是第一个字符
大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度
这就是sizeof(x)可以用来定义数组维数的原因
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
char ss[] = "0123456789";
sizeof(ss) 结果 11 ===》ss是数组,计算到 位置,因此是10+1
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[100] = "0123456789";
sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1
strlen(ss) 结果是10 ===》strlen是个函数,内部实现是用一个循环计算到 之前为止
int ss[100] = "0123456789";
sizeof(ss) 结果 400 ===》ss表示在内存中的大小 100×4
strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以' '结尾的
char q[]="abc";
char p[]="a ";
sizeof(q),sizeof(p),strlen(q),strlen(p);
结果是 4 3 3 2
一下忘记了,晕了。。。 多谢指点,这下子,多了一种办法了。
一周热门 更多>