防止字符串溢出c

时间:2015-08-13 20:38:39

标签: c string pointers malloc overflow

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

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] = '\0';
printf("length %lu\n", strlen(arr));
free(arr);

2 个答案:

答案 0 :(得分:1)

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

更改

nstring = sizeof(arr) + 1;

nstring = nstring*2;

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

编辑: 这不是唯一的问题。完成后还需要添加null终止符,并且还使用&#34; sizeof(arr)&#34;在你的打印声明中。你也需要解决这些问题。

答案 1 :(得分:0)

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

file()