我成功地打開了一個包含初始鍵值對的文件。代碼如下所示:fscanf讀訪問段錯
char key_tmp[30];
int value_tmp, status_index;
FILE *ZMU_Init_fd = NULL;
ZMU_Init_fd = fopen("zmu/zmu.cfg", "r");
if(ZMU_Init_fd == NULL)
{
printf("Could not open file");
strerror(errno);
}
printf("key tmp is %s, value tmp is %d\n", key_tmp, value_tmp);
fscanf(ZMU_Init_fd, "%s %s", key_tmp, (char *)value_tmp);
printf("key tmp is %s, value tmp is %d\n", key_tmp, value_tmp);
當我運行我得到:
key tmp is y? value tmp is 1
那麼它出現segfaults。當我改變獲得「W」的代碼設置zmu.cfg文件的大小爲0,我得到:
key tmp is y? value tmp is 1
key tmp is y? value tmp is 1
沒有段錯誤......有趣的是,一旦該文件是0字節,我可以改變訪問回「r」它不再segfaults,我得到:
key tmp is y? value tmp is 1
key tmp is y? value tmp is 1
我相信這與fscanf的工作方式有關。掃描時,fscanf會從文件中刪除該行嗎?我所要做的就是從文本文件中獲取鍵值對。我不認爲我可以使用fread因爲鍵不總是有相同的大小。我不想修改文件,有什麼想法?
zmu.cfg看起來是這樣的:
MessageNum= message50
MsgInitOne= 0x01
MsgInitTwo= 0x04
MsgInitThree= 0x01
MessageNum= message50
VarOne= 0x02
VarTwo= 0x01
MessageNum= message50
MsgValOne= 0x01
MsgValTwo= 0x04
MsgValThree= 0x02
MessageNum的鍵值只是將來可能編輯此文件的人員的佔位符,幾乎就像評論一樣。 我真的只關心十六進制值。我想我可以這樣做:fscanf(ZMU_Init_fd,「%s%s」,key_tmp,key_tmp);我會更新並重新發布。 –
如果你這樣做,你很可能會得到被該值覆蓋的密鑰。 –
對於第一行,我打算取消鍵值對,但問題肯定不是傳遞value_tmp的地址。我的問題是否因爲我沒有初始化值而被拒絕投票?投下的票數極大地阻礙了我對SO的提問。 –