您的位置:首页 > 编程语言 > C语言/C++

C语言-难以发现的小错误以及易忘心得(待续)

2017-08-04 09:38 197 查看
在重新巩固C的过程中,总一些很难被人所发现的小错误,直到找出的那一刻才会想通,回想真是令人无奈。至于这些错误的原因,大概是人的常识所误导;

1.printf("%d和%d的最大公约数和最大公倍数:%d%d\n",m,n,getMax_divisor(m, n),getMin_multiple(m, n));

//这段代码存在对2个函数调用顺序的不确定(不知道谁先谁后),一旦后调用的函数需要用到先调用函数中的值,编译就不断报错,尽量不要这样写(即使在高级编译器下)。

2.局部变量是必须初始化的(老忘,可能是java的影响吧)。

3.printf("%d", sizeof(str) / sizeof(char));//这样并不能获得字符串的长度

4.用vs编写C的时候,用scanf函数总会出现警告,原因是vs对该函数做了改进(因为scanf无法确定输入的个数,是否超出使用数组或字符串的个数要求),解决方法:

  ①用sacnf_s(编译器推荐的);

  ②#include <stdio.h>

     #pragma warning(disable:4996)

还有一些知识点老是忘,应该是用的较少的原因。

1.输入一个字符串的方法(注意添加相应的头文件):

   ①gets(arr);//缺点:不知道输入的字符串长度,可以用strlen(arr)测一下吧。

   ②可以用while(arr[i]!='\0'),然后用putchar(arr[i])或者printf("%c",arr[i]);//缺点:还要定义一个i,优点:执行最后一次i++的i就是字符串的长度。

   ③直接scanf("%s",arr);//和①很类似,唯一的区别就是不能输入空格(很不爽)

2.void statistics(char str[])//形参数组可以不指定大小,传进来多大就多大。

3.C语言中函数返回字符串的四种方法:

   自己看到的写的不错的博文,可以学习,链接为:http://www.cnblogs.com/qingergege/p/6496683.htm

4.C语言中可以返回局部变量么?

   有找到一篇写的不错的博文,只看第一段就明白了,链接为:http://blog.csdn.net/kai8wei/article/details/44699493 

5.void convert(int n)//经典递归

{
int i;
if ((i = n / 10) != 0)
convert(i);
putchar(n % 10 + '0');

}

//举例当n的实参为93时,i=9不等于0,执行convert(9);接下来n=9;i=9/10等于0,输出'9',程序回到convert(9)的下一步,输出'3'。

6.同一优先级的运算符,运算次序由结合方向决定,有从左到右,也有从右到左的。

7.不要将&a[0]简单地理解为a[i]元素的物理地址,因为并不存在a[i]这样一个实际的数据存储单元。它只是一种地址的计算方法,能得到第i行的首地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐