#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、在处理变量时,注意变量的格式控制是否合理等。