我有以下結構:Ç - 寫入字符數組到一個文件中
struct visitordata {
char name[25];
char email[25];
int id;
char reg_time[9];
};
我想從這些遊客數據寫入到文件中。我是從CLI閱讀本數據:
int main(int argc, char** argv)
{
struct visitordata mydata;
char name[25], email[25], eventid[10], c;
printf("Enter name: ");
scanf("%s", name);
strcpy(mydata.name, name);
//etc.
}
現在,當我嘗試寫入文件:
lseek(handle, -sizeof(mydata.name), SEEK_END);
fputs(handle, &mydata.name);
這會將用戶好嗎給輸入,還有些莫名其妙,因爲我分配char name[25]
如何從命令行讀取後分配char數組大小?我對此很新,請不要苛刻。謝謝!
您只爲該名稱保留25個字符。如果用戶輸入的時間更長,那麼你寫入的內存不是你的(緩衝區溢出)。在你的結構中,你可以使用'mydata.name = new char(strlen(name)+1)'來分配動態長度字符串。但你也應該保證,不要從'name'中讀取更多的字符,因爲你首先爲它保留字符。例如。通過使用'strncpy'而不是'strcpy'。也許保留一點點不止25個字符。還要確保字符串'\ 0'已終止。 – cwschmidt
如果可以的話,你不應該用C來完成這些任務,因爲你有足夠的機會在腳下射擊自己。考慮Java或Go,它們可以保護您免受緩衝區溢出和其他內存損壞,格式化字符串攻擊,堆分配錯誤等等。一旦你獲得了更多的經驗,如果你真的想要,你可以切換到C. –
我必須在C ... –