1. 深刻教训:
千万不要在程序中随意移动你的指针!!!因为这个小问题搞了一下午+晚上
2. 关于关于字符串空间分配问题:
字符数组的容量必须至少比待存储字符串中的字符数多1.
在分配字符指针空间malloc() 时也必须至少比至少比待存储字符串中的字符数多1,再分配空间后必须及时free(); 释放指针后, 一定要将指针指向NULL。否则p指向的空间是未知数据 p就成了野指针
char test[5] = "abcd"; //最多四个字符
char *info = malloc(6);
memset(info, 0, 6);
strcpy(info, "abcdef");//此处分配的字符串空间不足,申请6个字符空间,最多5个字符**
printf("1.%s\n", test);
//info++;
printf("2.%s\n", info);
free(info);
info = NULL;
3.关于C变量声明的问题
编译器问题——C89和C99
C89规定,在任何执行语句之前,在块的开头声明所有局部变量。
在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。
Visual Studio2013终于开始比较良好地支持C99特性
- 源文件保存为.c格式的话变量只能定义在最前,若保存为.cpp格式的话,变量定义较为灵活,不用在最前。
- 在C语言里,变量只能在函数的开头处(作用域即{})声明和定义。 在函数里要用到的变量必须要在开头处声明定义。声明定义的前面不能有任何其他非声明定义的语句。全局变量在函数体的外部声明定义。而 C++ 里(.CPP文件是按C++标准编译的),只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求。而C语言的就定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。
希望大家以此为鉴,不要犯低级错误!