防止字符串在c中溢出
prevent strings overflowing in c
使用 C 我想分配最大初始字符串长度的堆 space,在我的例子中是 6,然后
每次字符串即将溢出时,将可用 space 加倍。
我想通过 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] = '[=10=]';
printf("length %lu\n", 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] = '[=10=]';
printf("length %lu\n", strlen(arr));
free(arr);
使用 C 我想分配最大初始字符串长度的堆 space,在我的例子中是 6,然后 每次字符串即将溢出时,将可用 space 加倍。 我想通过 char.
构建字符串 charsize_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] = '[=10=]';
printf("length %lu\n", 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] = '[=10=]';
printf("length %lu\n", strlen(arr));
free(arr);