平常一般用指针,不用数组,但是觉得一点点小东西也用指针并不好,还要自己释放,于是用了一次数组, 其中有一段小程序
1 char *src = "div class"; 2 char label[3]; 3 bzero(label, 3); 4 strncpy(label, src, 3); 5 printf("%s\n", label);
本来是想输出div,但是实际上后面会有其他字符,我一开始没有想到,用gdb把label[0],label[1],label[2]全部输出了,是div,但是为什么还有其他的呢?突然想到数组的最后还得有一个\0,来表示这个数组的结束,于是改成
1 1 char *src = "div class"; 2 2 char label[4]; 3 3 bzero(label, 4); 4 4 strncpy(label, src, 3); 5 5 printf("%s\n", label);
结果就对了。
数组是存放在栈中的,所以可以使用别的变量所占有的栈,但是指针是堆里面,引用别人的会segment fault,所以栈错误更加难以发现