從文本文件直接讀入結構是...奇怪。直接讀取結構通常意味着您正在加載二進制數據結構,而不是文本。
它「工作」,因爲你的結構奇怪地設置。正常的結構使用指針來存儲字符串,就像這樣。
typedef struct {
char *a;
char *b;
} normal_struct;
如果你希望把文本插入結構,你分配一個字符串(即一個char *
)要麼thing->a
或thing->b
。
/* Allocate memory for the string in the struct */
thing->a = malloc(...);
...use thing->a like any other char *...
所以你read()
到thing->a
,不進thing
。
將char *
放入此結構中很容易。只需指定它...並確保釋放任何已經在thing->a
。
if(thing->a != NULL)
free(thing->a);
thing->a = str;
你做了什麼,而不是創建具有固定大小串的結構。
typedef struct {
char a[3];
char b[3];
} my_struct;
前三個字節是a
和第二三個字節是b
。
當您將read
轉換爲my_struct
時,文本文件的前3個字節變爲a
,第二個變爲b
。如果文件是foobarbaz
那麼mst->a
是foo
而mst->b
是bar
。
但是,由於您只是卡住了那裏的字符,這些字符串沒有空填充。 C不知道他們有多久。像printf("%s\n", mst->a)
之類的東西很可能會產生foobarald;kfjl2
,因爲它在結構之外讀取垃圾,直到碰巧看到null。
爲此以及其他許多原因,您最好使用char *
s構建結構。
不要描述你的代碼不工作,顯示它。 –
您可能需要'strncpy()',而不是'read()' – mustaccio
注意:'char *'是一個**指針**。在C中,字符**數組中的_string_直到包括終止空字符。 – chux