编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,...
编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,并返回该字符串的拷贝,这个函数不应该对读入字符串的长度作任何限制!答案:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define DELTA 256
char *readstring()
{
static char *buffer = NULL;
static int buffer_size = 0;
int ch;
int len = 0;
char *bp = buffer;
do{
ch = getchar();
if(ch == '\n' && ch == EOF)
ch = '\0';
if(len > buffer_size){
buffer_size += DELTA;
buffer = realloc(buffer,buffer_size);
assert(buffer != NULL);
bp = buffer + len;
}
*bp++ = ch;
len++;
}while(ch != '\0');
bp = malloc(len);
assert(bp != NULL);
strcpy(bp,buffer);
return bp;
}
这个BP可以直接++吗?不会和别的地址冲突吗?不应该申请一定的内存空间才能++吗 求大佬帮忙谢谢 肉眼感觉
L27: len++;
应该放到
L19 本帖最后由 superbe 于 2020-7-7 19:42 编辑
第20行 if(len > buffer_size){ 这行里应该改成 len >= buffer_size,不然运行出错。
realloc() 每次重新分配内存,起始地址不一定与原来相同,但是每次总长度增加 DELTA 这一块长度。在循环里 BP 是指向DELTA这一块的首地址,++不会和别的地址冲突。
页:
[1]