我需要一個函數來重現另一個程序的getline函數的基本功能,這個函數應該能夠正確讀取一個FP並且沒有巨大的緩衝區(這裏256應該已經足夠了) 我有2個下面 的代碼問題 - 功能開始返回緩衝區時,exeeded,此文件例如http://pastebin.com/BXj3SH92(./a.out <文件)錯誤信息 - 當我把我的功能,沒有給它一個文件,它應該工作就像一隻貓,但它停止後,我按第一輸入鍵(./a.out)重新編碼getline函數C
這裏是代碼:
#define MOAR_BUF 256
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
char *my_getline(const int fd)
{
static char save[MOAR_BUF];
static int i = MOAR_BUF;
int g;
int f;
char *save2;
save2 = NULL;
g = 0;
f = 0;
if (g == 0 && i >= (MOAR_BUF -1))
{
i = 0;
g = read(fd, save, MOAR_BUF + 1);
save[g] = '\0';
}
if (i <= MOAR_BUF && save[i] != '\0')
{
save2 = malloc((sizeof(*save2) * MOAR_BUF));
while(save[i] != '\n' && save[i] != '\0')
save2[f++] = save[i++];
save2[f] = '\0';
if (save[i] != '\0')
i = i + 1;
}
return(save2);
}
int main()
{
int i;
char **converted_map;
char *map;
i = 0;
converted_map = malloc(sizeof(*converted_map) * 30);
while(map = my_getline(0))
{
converted_map[i] = strdup(map);
printf("%s\n", converted_map[i]);
i++;
}
}
你'的malloc()'是不是完全正確的:你乘'MOAR_BUF'與'的sizeof(SAVE2)'這'北京時間的sizeof(字符*)'。但是,這不僅使緩衝區過大的應該不會造成任何問題 –
固定的,我知道我沒有對malloc ** converted_map由我不順便知道爲什麼 – Saxtheowl