2015-03-03 60 views
0
char buf[256]; 
    ssize_t bytes_read; 
    /* Read some data from the client. */ 
    bytes_read = read (fd, buf, sizeof (buf) - 1); 
    buf[bytes_read] = '\0'; 
    printf ("Buffer %s", buf); 

這是輸出顯示。如何從c中的char緩衝區中只讀取第二行?

GET /index.html HTTP/1.1

主機:127.0.0.1:8080

的User-Agent:Mozilla的/ 5.0(X11; Ubuntu的版本; Linux x86_64的; RV:33.0)壁虎/ 20100101火狐/33.0

接受:text/html的,應用/ XHTML + xml的,應用/ XML; q = 0.9,/; q = 0.8

接受語言:EN-US,EN; q = 0.5

接受-EncoMy主機名:Ubuntu的 FILE:58HTTP/1.1 200 OK

日期:星期二,2015年3月3日15時56分02秒

服務器:主機服務器

的Last-Modified:週二, 2015年2月17日〇時19分56秒

內容類型:text/html的

內容長度:58

我只需要存儲「127.0.0.1」。 請提供諮詢。謝謝。

+0

顯示更多的代碼。你有什麼嘗試? – 2015-03-03 07:52:04

+0

這是我的代碼。我試了sscanf(buf,「\ r \ n%s」,host); – GURU 2015-03-03 08:03:24

回答

1

參考了C字符串處理庫:link

你似乎什麼想做的是通常被稱爲「分裂字符串」。 在你的案件中,所以你會分裂在行結束字符。 注意根據您的輸入,這可能是「\ n」或「\ r \ n」個

你需要的功能是strtok 鏈接包括如何將一個字符串分解一個非常好的例子。

你只需要通過「\ n」,例如分裂:

char *token = strtok(input, "\n"); 
    while(token) { 
     printf(token); 
     token = strtok(NULL, "\n"); 
    } 

而不是printf的,你現在可以保存您的行逐一以備後用,或者你可以保留一個計數器,只是處理第二然後退出,如果這是你需要的。

+0

它在這裏不起作用。它顯示「User-Agent:Mozilla/5.0(X11; Ubuntu; Linux x86_64; rv:33.0)Gecko/20100101 Firefox/33.0 ....」之後。 – GURU 2015-03-03 08:09:56

+0

閱讀關於「而不是printf」的最後一部分......我給了你實現解決方案的工具,我不認爲我的想法是我爲你寫程序。你也改變了你的問題,因爲我發佈了這個... – 2015-03-03 08:21:20