C语言,malloc()与realloc()的运用,请高手修改程序,真诚希望贴上可运行程序

来源:百度知道 编辑:UC知道 时间:2024/05/21 13:05:14
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>

#define ALLOC_SIZE 256

static char *st_line_buffer = NULL;

static int st_current_buffer_size = 0;

static int st_current_used_size = 0;

static void add_character(int ch)
{
assert(st_current_buffer_size >= st_current_used_size);

if(st_current_buffer_size == st_current_used_size){
st_line_buffer = (char*)realloc(st_line_buffer, (st_current_buffer_size + ALLOC_SIZE) * sizeof(char));
st_current_buffer_size += ALLOC_SIZE;
}
st_line_buffer[st_current_used_size] = ch;
st_current_used_size ++;
}

char *read_line(FILE *fp)
{
int ch;
char *ret;

st_current_used_size = 0;
while((ch = getc(fp)) != EOF){
if(ch == '\n'){
add_character('\0');
break;
}
add_character(ch

main()函数哪去了?

****************************

strcpy_s()函数需要三个参数,你少了一个表示最多复制字符数量的参数。

尝试修改如下:

strcpy_s(ret,st_current_used_size,st_line_buffer);

怎么没有主函数啊?

给ret指针分配的内存要再多一个用于保存字符串结束标记,否则会导致对内存的非法访问。另外,可以将strcpy_s函数该为strcpy()函数。或者:strcpy_s()函数需要三个参数,你少了一个表示最多复制字符数量的参数。

尝试修改如下:

strcpy_s(ret,st_current_used_size,st_line_buffer);