2013-11-22 43 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