2011-09-10 127 views
0

我試圖製作一個簡單的客戶端和服務器。現在我可以將文件的內容輸出到屏幕上。現在我想將從緩衝區讀取的每一行存儲到一個數組中。我試圖這樣做,但由於某些原因,它總是隻添加從緩衝區接收到的最後一行。任何人都可以指出我在那裏出了錯從緩衝區中讀取數據並將其存儲在數組中

int getFile (char path[256], int fd) 
{ 
    char buffer[256]; 
    char bufferCopy[256]; 
    char arguments[1000][1000]; 
    int total = 0; 
    char * ptr; 

    while(read(fd, buffer, 256) != NULL) 
    { 
     char * temp; 

     strcpy(arguments[total], buffer); 
     total++; 


    } 
    for(int i = 0; i < total; i++) 
    { 

     printf("\n %s", arguments[i]); 


    } 



} 

回答

2

read通話不讀的線條,它讀取多達來自fd 256個字節。 read也不知道有關空終止符的任何信息,所以不能保證buffer將保存一個字符串(即有一個空終止符),因此不能保證strcpy將停止在明智的地方複製。你幾乎肯定會在你的籌碼上亂塗亂畫,一旦你這樣做了,所有的投注都會關閉,你不能指望任何明智的事情發生。

如果你想讀取線條,那麼你可能想切換到fgets或繼續使用read並找出EOL是你自己的。

+1

你的while的頂部還可以使用if(total> = 1000)break;避免超出內存。 – Gilbert

+0

@吉爾伯特:是的,也是。 –

相關問題