【C语言】常见错误

来源:互联网 发布:我心中的全面小康知乎 编辑:程序博客网 时间:2024/04/28 14:40

1、

char * p;
注意p中包含字符串结束符‘\0’

2、

strlen函数没有包含字符串末尾的'\0'

3、

如果函数的参数是一个指针,不要指望用该指针去申请动态内存

4、

createNode(BinNode *tree,char *p)
     {
         tree = (BinNode *) malloc(sizeof(BinNode));
         tree->data = *p;
     }

访问tree.data错误;
 原来问题出在C编译器原理上:编译器总是要为函数的每个参数制作临时副本,指针参数tree的副本是 _tree,编译器使 _tree = tree。如果函数体内的程序修改了_tree的内容,就导致参数tree的内容作相应的修改。这就是指针可以用作输出参数的原因。
即上面的函数代码经过编译后成为:
     createNode(BinNode *tree,char *p)
     {
         BinNode *_tree;
         _tree = tree;
         _tree = (BinNode *) malloc(sizeof(BinNode));
         _tree->data = *p;
     }
5、

char p[] = "helloworld";

return p;

p数组为函数内的局部变量,在函数返回后内存已经被释放,考虑变量的生存周期

原创粉丝点击