簡介
在Linux套接字程式設計中,發送的都是void類型的資料,本質上可以看成位元組流,因為我們一般是發送的char的資料。那麼,這樣就涉及到一個問題,如果我們的資料不是字元串,而是整型、浮點型和更加複雜的結構體,那麼此時就需要對這些結構進行格式化。
一般通過
snprintf
把資料寫入到指定的流中,這個函數比
sprinitf
更安全,因為增加了最大緩沖區的限制。然後通過
sscanf
讀取資料。隻要保證資料寫入和讀出的格式是比對的,而且有足夠的緩沖區,那麼就可以完成資料的收發。
注意點:兩個格式化函數的格式化格式中,一定要用空格分隔開相鄰的資料!!!
代碼執行個體
定義一個
Info
類型,然後通過流的方式,把
info
的資料指派給
info1
,然後輸出結果進行檢驗。
#include <stdio.h>
#include <string.h>
struct Info {
int i;
float f;
double d;
char str[3];
};
int main() {
Info info;
info.i = 1;
info.f = 2.0f;
info.d = 3.0;
info.str[0] = 'a';
info.str[1] = 'b';
info.str[2] = 'c';
char buf[1024];
// 寫入資料,注意空格
snprintf (buf, 1024, "%d %f %lf %s", info.i, info.f, info.d, info.str);
Info info1;
// 讀取資料,注意空格
sscanf (buf, "%d %f %lf %s", &info1.i, &info1.f, &info1.d, info1.str);
printf ("%d, %f, %lf, %s\n", info1.i, info1.f, info1.d, info1.str);
printf ("%d, %d, %d\n", sizeof (info), sizeof (info1), strlen (buf) );
return 0;
}