#include <stdlib.h>#include <stdio.h>#include <string.h> const int NUM = 5 ; // number to be converted max=65535 typedef char* pchar ; FILE *text ; int main(){ pchar fname = (pchar)malloc(sizeof(char)*10) ; pchar buf = (pchar)malloc(NUM); int i = 0; for(i=0;i<40;i++) { printf("%4d",fname[i]); } printf("\n"); fname[9] = '\0'; // strset(fname,'\0'); for(i=0;i<40;i++) { printf("%4d",fname[i]); } printf("\n"); for(i=0;i<2;i++) // for(i=0;i<4;i++) fname溢出,使free(fname)出错 { //strset(fname,'\0'); strcat(fname,"c:\\z"); puts(buf); puts(fname); } free(buf); free(fname); return 0;} strcat 函数不检查字符串的长度,只是把两个串拼接strset 函数并是把'\0'前的所有字符串设置为一个值,而不是对所有的,所以在strset 函数使用前如果没有对所使用的指针初始化赋值(在声请的合法空间内赋'\0'或者0表明字符串的结束位置)free 函数也是把指针首地址到第一个'\0'的那段字符串空间给释放掉,也就是字符串指针的操作大都是基于结束符'\0'的

评论