#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'的
评论