2013.4.15
最初学习C语言基本都是参照别人的代码,或者直接码一遍别人的字,然后在计算机上运行,经常会遇到一些错误,具体没有统计过,总之,大部分是链接错误、定义错误、或者是VC++编译器不兼容的一些问题,没遇到这样的问题,我总是不知所措,只好又在网上找其他的相似的代码。去年暑假在实验室学习了二十天的编程,学会了调试,就慢慢开始自己寻找错误在哪。上学期自己移植了一些Linux上的代码,逐渐对错误的调试熟练起来。
但是,我几乎没有自己独立的编写过代码,总是在别人的基础上做点小小的工作,这导致了我一到自己动手写代码,总是这也不清楚,那也不确定,所谓基础不牢,地动山摇。所以,从上个月开始,我重视了对C语言基础的学习。对于C语言学习不能作为一个独立的分支,而要贯穿到我编写算法的过程慢慢积累,久而久之,我先对C库函数非常熟悉,然后能够建立自己的库。
这篇文章主要记录我在编写自己的代码中,遇到的问题。
1、求整形数组的长度。
我写的第一个函数是insertion_sort(插入排序),其中要用到数组的长度。求字符串数组有专门的函数strlen,但是整形数组并没有相应的函数。
宏定义法:
#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}
错误的方法:
int Listlength(int *L)
{
int count=0;
int *p=L;
while (p!=NULL)
{
count++;
p++;
}
return count;
}
因为当p指向数组的最后一个元素的下一个值时(即发生越界)还是会指向一个值,不会是NULL也不是’\0’,所以返回值count不会是数组的长度。
2、从文件中读取一个整型数组。
例如:将myData.txt
20 2 4 9 100 78 22 58 20 44 78
读入到arr[]中。
首先,定义arr[]的长度(必须大于txt文件中数组的长度),假设为:
#define SIZE 100
然后,
count = 0;
pFile = fopen("myData.txt", "r");
while(!feof(pFile))
{
fscanf(pFile, "%d", arr+count);
count++;
}
length = count;
还可以计算出文件中数据的长度。