2013-11-22 42 views
0

我需要你一个小问题。 我尝试读取一个文件并根据我的宏的值显示他的内容(如fonction“cat”)。 与我的BUFF_SIZE 4096我显示字符串容易,但是当我把BUFF_SIZE 1,我的程序显示所有行的第一个字符。 因为我在我的个人电脑上,所以我不能确定我的代码是100%,但如果你确实需要它,我明天就可以给你。 对于我的问题,我认为我必须做一些类似功能的strdup,但我真的不知道我可以包括它在我的代码C - 显示一个低字符的字符串

#define BUFF_SIZE 4096 

char  *my_function(const int a) 
{ 
static int i; 
static char **str; 
static int ret; 
static char *buff[BUFF_SIZE]; 
static int j; 

i = 0; 
j = 0; 
str = malloc(BUFF_SIZE * sizeof(char)); 
while ((ret =read(a, buff, BUFF_SIZE)) > 0) 
    { 
    while (buff[i] != '\0') 
     { 
     str[j] = buff[i]; 
     i++; 
     j++; 
     } 
    return (str); 
    } 
free(str); 
} 

对不起,我大概英语

+1

(a,buff,BUFF_SIZE)会返回一个int吗?怎么会这样? – JoeC

+0

'str = malloc(BUFF_SIZE * sizeof(char));'没有分配足够的内存;使用'海峡=的malloc(BUFF_SIZE *的sizeof海峡[0]);' – ensc

+0

我忘了改读,我有我的编辑的消息是RET =阅读(一,浅黄色,BUFF_SIZE) – Thebeginner

回答

1

static char *buff[BUFF_SIZE];

你已经将buff声明为指向char的指针数组。同时,你使用它的方式暗示你真正的意思是

static char buff[BUFF_SIZE];

你的功能也会有严重的问题,如果你把它不止一次。 例如,ij在下次调用my_function()时可能不会为零。 '静态'表示变量在程序启动时将被初始化。它在函数入口处不会初始化变量。

+1

和str应该被定义为'char * str',而不是'char ** str' –

+0

确实。 'gcc -Wall -Werror'应该是默认的编译器设置。 :-) – ArtemB