防止c语言中的字符串溢出



使用C,我想分配最大初始字符串长度的堆空间,在我的情况下是6,然后每当字符串即将溢出时,将可用空间加倍。我想一个字符一个字符地创建字符串

size_t nstring = 6;
char *arr =  malloc(nstring);
int i;
for (i = 0; i < 55;i++){
        if (i == nstring) {
                printf("mAx sized!!");
                arr = realloc(arr, nstring*2);
                nstring = nstring*2;
            }
    arr[i] = 'f';
}
arr[i] = '';
printf("length %lun", strlen(arr));
free(arr);

sizeof是指针的大小,而不是它所指向的数据的大小。

改变
nstring = sizeof(arr) + 1;

nstring = nstring*2;

记住,arr是一个指针,指针总是地址的大小(32位为4,64位为8,等等)。

编辑:这并不是唯一的问题。完成后还需要添加空结束符,并且还需要在打印语句中使用"sizeof(arr)"。

在Garr Godfrey和Amit的帮助下,我找到了这个解决方案。

size_t nstring = 6; 
char *arr =  malloc(nstring);
int i;
for (i = 0; i < 55;i++){
        if (i == nstring) {
                printf("mAx sized!!");
                arr = realloc(arr, nstring*2);
                nstring = nstring*2;
            }
    arr[i] = 'f';
}
arr[i] = '';
printf("length %lun", strlen(arr));
free(arr);

相关内容

  • 没有找到相关文章

最新更新