http://www.csdn.net/article/2012-09-06/2809604-12-c-interview-questions/2
1) 输入字符串 要用 fets()代替gets(), 因为gets没有对字符串长度进行检查,容易溢出.
2) 拷贝未知长度的字符串, 也要用strncpy()代替strcpy(),理由同上
3) main函数的返回类型为int, 这点非常重要,特别当程序是作为依赖于程序成功运行的脚本的一部分运行时
4)main函数结束时,没有free,程序退出,系统会自动free这个程序分配的所有内存,但是,如果代码处于一个循环中,就会导致严重的内存泄漏.
5) 要free一个指针, 指针变量的指向就不能随便更改. p++后,再free(p),就会出错
6) #include <stdlib.h> int atexit( void (*func)(void) );
可以实现,多重调用. 但是需要与return 或者 exit配合使用, _exit()会使其无效.
7) void*可以接受任何类型的指针
8) char* k = *ptr++; 则先执先 k = ptr, 再执行 ptr++;
9) char* ptr = "Linux"; 这段代码定义的字符串是常量字符串,如果用*ptr = 'T',就会出现seg-fault或者崩溃.
下面的程序确实会出错:
#include<stdio.h>
int main()
{
char* ptr = "Linux";
*ptr = 'T';
printf("%s\n", ptr);
return 0;
}
10) 会改变自己名字的进程, 就是改变main()函数的参数,argv[0];
11)不能返回局部变量的地址
12) printf计算参数变量值,是从右向左计算