c笔记

来源:互联网 发布:java qq登录 编辑:程序博客网 时间:2024/05/01 21:52
1、遇到的关于变量存储问题
int main(){        short  b;//b放置在栈上,占用2个字节         char a[100];//需要在栈上开辟100个字节,a的值是其首地址         char s[]=”abcde”;//s在栈上,占用4个字节,“abcde”本身放置在只读数据存储区,占6字节。s是一个地址常量,不能改变其地址数值,即s++是错误的。         char* p1;//p1在栈上,占用4个字节         char* p2 =”123456”;//”123456”放置在只读数据存储区,占7个字节。p2在栈上,p2指向的内容不能更改,但是p2的地址值可以改变,即p2++是对的。         static  char bss_2[100];//局部未初始化数据段         static  int   c=0 ;//局部(静态)初始化区         p1 = (char*)malloc(10*sizeof(char));//分配的内存区域在堆区         strcpy(p1,”xxx”);//”xxx”放置在只读数据存储区,占5个字节         free(p1);//使用free释放p1所指向的内存         return 0;}

2、对于strlen函数的返回值是一个无符号数,所以返回值相减的话不会产生负数值,因此不能进行大小值的比较:

例如: 这样做是不对的

if((strlen(a)-strlen(b)) <=0){    。。。。。。。}

再看一下strlen原型的实现

size_t strlen(const char* s){    size_t length  = 0;        assert(s);    while(*s++)    {          length++;     }    return length;}

里面的assert函数的功能是判断s是否为空,如果它为空的话会返回错误

 

原创粉丝点击