我們調用一個庫來讀取文本,這個庫API只接受一個FILE*
指針。它實際上是通過內部呼叫fread()
來讀取文件文本。如何通過fread函數讀取char *字符串?
但是我們還需要使用此庫從char*
字符串中讀取文本,而不是FILE*
。
我們當然可以寫char*
串到一個臨時文件,但我們不能因爲某些原因這樣做......
怎麼辦?謝謝 !!
我們調用一個庫來讀取文本,這個庫API只接受一個FILE*
指針。它實際上是通過內部呼叫fread()
來讀取文件文本。如何通過fread函數讀取char *字符串?
但是我們還需要使用此庫從char*
字符串中讀取文本,而不是FILE*
。
我們當然可以寫char*
串到一個臨時文件,但我們不能因爲某些原因這樣做......
怎麼辦?謝謝 !!
退房fmemopen
的fmemopen()函數應與流的BUF參數給出的緩衝區關聯。
#include <stdio.h>
static char buffer[] = "foobar";
int main (void)
{
FILE *stream;
stream = fmemopen (buffer, strlen (buffer), "r");
/* You got a FILE* pointer, you can call your function here :-) */
}
我不認爲這可以做到。 fread只能從文件流中讀取,即FILE *或stdout。
馬尼克,我認爲你的意思'stdin',但在任何情況下,這仍然是一個'FILE *',所以多餘的:-) – paxdiablo
嗯,短的寫你自己的設備驅動程序與過程溝通回來,這是一個棘手的。到那個,我的意思是,你可以創建一個字符設備將其從讀出時,通過某種IPC(共享內存,命名管道,或其他東西)的通信迴流程。
但是,這是(1)討厭的,(2)特定於UNIX(非便攜式)和(3)一個非常糟糕的主意:-)
沒有這樣的低級伎倆(或與非便攜擴展名可以像文件句柄一樣處理內存),但這不能完成 - fread
需要FILE*
,並且將從文件句柄中讀取,就是這樣。
在各種UNIX系統中,你可以創建一個管道/插座或類似的文件描述符,並使用fdopen()打開文件描述符,並得到一個FILE *指針。然後將該字符串送入管道/套接字。
我建議你查一下,當你遇到這樣奇怪的問題你的程序/庫設計。奇怪的問題/要求是糟糕設計的強烈跡象。
這是什麼操作系統? – cnicutar
誰說你不被允許,順便說一下?你可能需要去教育他們(比如「用大棒教育」)。 – paxdiablo