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行的首地址。
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行的首地址。
相关文章推荐
- c语言常见的错误,以及解决方法
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- linux下GCC编译环境中二叉树遍历、C语言实现以及调试过程中段错误
- 请大家看一下一个c语言中的链表问题,下面的代码是有错误的!!请大家说出错误的原因,以及修改的方法!!!
- c语言使用DES_ncbc_encrypt以及段错误 (核心已转储) 解决
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- thinkphp——模板标签中include,由于疏忽发生了一个难以发现的错误
- c语言使用DES_ncbc_encrypt以及段错误 (核心已转储) 解决
- 亲测cocos2d-x3.2打包到android以及发现一个BundleReader里的错误
- Android-BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- 由Huffman编码引起的回忆,以及难以发现的bug.
- C语言linux下实现多语言以及错误处理
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制