大家说来说C语言的缺点

2020-02-11 09:53发布

我就感觉这个特不方便。
1.我发现,要定义一个数组或是字符串,最好要定义数组的大小,不然,如果后面要用指针来操作这个数组,没办法知道  数组大小,整个程序就OVER。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
wind2100
1楼-- · 2020-02-15 12:04
 精彩回答 2  元偷偷看……
wicy001
2楼-- · 2020-02-15 13:05
chengz 发表于 2014-11-29 11:53
没有数组越界检测,没有内存自动回收。。。。

原来大家都喜欢 傻瓜式编程!

越界的事:我觉得可以在编译器上面动手脚,编译的时候知道,数组大小,data[100],  0-99   data[x]  如果x > 99  就跳过这一条指令。

函数退出来,你申请的动态内存就 释放了 ,但在PC上,free ,delete
Edesigner.
3楼-- · 2020-02-15 14:50
选自百度, 把这几个例子弄懂了,应该可以满足你的要求

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
wind2100
4楼-- · 2020-02-15 17:05
做了13年电子,写了13年C代码,感觉挺累的。
彼岸花开@
5楼-- · 2020-02-15 20:39
wicy001 发表于 2014-11-29 13:35
数组的大小,和数组里存的数据个数,是两个不同的概念。

这种方法,只是针对你LZ位,说明用指针可以返回 ...

一下忘记了,晕了。。。 多谢指点,这下子,多了一种办法了。
lyyyuna
6楼-- · 2020-02-16 01:44
 精彩回答 2  元偷偷看……

一周热门 更多>