c语言注意事项

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

//c语言注意事项
//toupper(str); extern int toupper(int c);
//tolower(str);
//大小写转换
void UpperCase(char str[])
{
	size_t i=0;
	for(i=0;i<strlen(str)/sizeof(str[0]);++i)
	{

		if('a'<=str[i]&& str[i]<='z')
		{
			str[i]-='a'-'A';
		}
	}
}
void LowercCase(char str[])
{
	size_t i=0;
	for(i=0;i<strlen(str)/sizeof(str[0]);i++)
	{
		str[i]=tolower(str[i]);
	}
}
void test(char str[100])
{

	printf("test=%d\n",sizeof(str));//数组退化为指针 4
}
//big_endian =0,little_endian=1 x86小端
int checkCPU()
{
	union w{
		int a;
		char b;
	} c;
	c.a=1;
	return c.b==1;

}
int sum(int n)
{

	return ((long)1+n)*n/2;
}
int sum2(int n)
{

	return (1l+n)*n/2;
}
int sum3(int n)
{
	long sum=0;
	int i=0;
	for(i=1;i<=n;i++)
	{

		sum+=i;
	}
	return sum;
}

//在c语言中声明不能放在scanf printf()函数后。否则会报错
int main()
{
	int n;
	char str[]="abcDE";
	int a[5]={1,2,3,4,55};
	int *ptr=(int*)((&a)+1);//移动距离sizeof(a)=5,一个数组的偏移
	char * s="AAA";//这个声明有错,应该是 const char * s="AAA";

	void *p=malloc(100);
	char h[100]={10};//这个只是赋值h[0]=10而已
	char l[100];
	memset(l,10,sizeof(l));//声明数组元素后记得使用memset初始化为0
	printf("%s\n",s);
	printf("*p=%d\n",sizeof(p));//指针的大小为4
	test(str);
	//s[0]='B';//对常量进行操作出错
	printf("checkCPU=%d\n",checkCPU());
	printf("sum=%d\n",sum(10));
	printf("sum2=%d\n",sum2(10));
	printf("sum3=%d\n",sum3(11));
	
	printf("%d,%d\n",*(a+1),*(ptr-1));//2,55 移动距离sizeof(int*)=1

	printf("%s   len=%d  strlen=%d \n",str,sizeof(str)/sizeof(str[0]),strlen(str));//长度加以一
	UpperCase(str);
	printf("%s\n",str);
	LowercCase(str);
	printf("%s\n",str);

	scanf("%d",&n);
	fflush(stdin);
	return 0;
}



一、 一些注意事项

1、出现段错误时,首先应该想到段错误的定义,从它出发考虑引发错误的原因。

2、在使用指针时,定义了指针后记得初始化指针,在使用的时候记得判断是否为NULL。

3、在使用数组时,注意数组是否被初始化,数组下标是否越界,数组元素是否存在等。

4、在访问变量时,注意变量所占地址空间是否已经被程序释放掉。

5、在处理变量时,注意变量的格式控制是否合理等。


你可能感兴趣的:(c语言注意事项)