本文目錄一覽:
- 1、C語言 結構體指針字符 二進制文件寫入和讀取
- 2、c語言中怎麼把一個結構體數組寫入文件
- 3、C語言編程學生信息結構體,保存文本文件或二進制文件中.求大神知道啊。
- 4、c++中如何向二進制文件讀寫含有string類型的結構體變量
C語言 結構體指針字符 二進制文件寫入和讀取
當然不對了,你的結構體成員,是一個指針
sizeof(student) ,win32是4字節,win64是8字節
當讀入其中4個或8個字節時,它指向的指針地址並不一定存在
你可以定義為一個字符數組
c語言中怎麼把一個結構體數組寫入文件
C語言把一個結構體數組寫入文件分三步:
1、以二進制寫方式(wb)打開文件
2、調用寫入函數fwrite()將結構體數據寫入文件
3、關閉文件指針
相應的,讀文件也要與之匹配:
1、以二進制讀方式(rb)打開文件
2、調用讀文件函數fread()讀取文件中的數據到結構體變量
3、關閉文件指針
參考代碼如下:
#includestdio.h
struct stu {
char name[30];
int age;
double score;
};
int read_file();
int write_file();
int main()
{
if ( write_file() 0 ) //將結構體數據寫入文件
return -1;
read_file(); //讀文件,並顯示數據
return 0;
}
int write_file()
{
FILE *fp=NULL;
struct stu student={“zhang san”, 18, 99.5};
fp=fopen( “stu.dat”, “wb” ); //b表示以二進制方式打開文件
if( fp == NULL ) //打開文件失敗,返回錯誤信息
{
printf(“open file for write error\n”);
return -1;
}
fwrite( student, sizeof(struct stu), 1, fp ); //向文件中寫入數據
fclose(fp);//關閉文件
return 0;
}
int read_file()
{
FILE *fp=NULL;
struct stu student;
fp=fopen( “stu.dat”, “rb” );//b表示以二進制方式打開文件
if( fp == NULL ) //打開文件失敗,返回錯誤信息
{
printf(“open file for read error\n”);
return -1;
}
fread( student, sizeof(struct stu), 1, fp ); //讀文件中數據到結構體
printf(“name=\”%s\” age=%d score=%.2lf\n”, student.name, student.age, student.score ); //顯示結構體中的數據
fclose(fp);//關閉文件
return 0;
}
fwrite(const void*buffer,size_t size,size_t count,FILE*stream);
(1)buffer:指向結構體的指針(數據首地址)
(2)size:一個數據項的大小(一般為結構體大小)
(3)count: 要寫入的數據項的個數,即size的個數
(4)stream:文件指針。
C語言編程學生信息結構體,保存文本文件或二進制文件中.求大神知道啊。
你需要用到打開文本或者創建一個文本寫入相關的知識,當然還有結構體;
(“結構體”跟“C語言文件”請自行百度百科)
//首先定義學生結構體
struct strudent{
int score;
int num;}
然後當然他有各種數據
然後在main()函數中用到fopen;
*f=fopen(“x://student.txt,w);用‘w’打開的話若沒有文件會創建一個文件;
if(f=NULL)//判斷打開是否失敗
printf(“打開失敗”);//接下去就是寫入,你可以使用二進制文件操作
******下面是資料*****
3.1 數據塊存取函數
函數原型:
_CRTIMP size_t __cdecl fread(void *, size_t, size_t, FILE *);
_CRTIMP size_t __cdecl fwrite(const void *, size_t, size_t, FILE *);
當要求一次存取一組數據(如,一個數組、一個結構體變量的值),fread和fwrite函數可以解決該類問題。它們的調用形式一般為:
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
buffer:對於fread來說,指的是讀入數據的存放地址;對於fwrite來說,是要輸出數據的地址。
size:讀寫數據時,每筆數據的大小
count:讀寫數據的筆數
**********************
所以剩下的就是
fwrite(student_1, sizeof(student), 1, f);
當然,為了更好的存儲數據,你完全可以把student設計成數組。夠了吧,需要用到的資料百度百科或者個人博客上都有,我連關鍵字都留給你了。手打~
c++中如何向二進制文件讀寫含有string類型的結構體變量
代碼樣例:
#include stdio.h
#includestring
using namespace std;
struct student
{
string name;
string num;
string age;
};
void main()
{
FILE *fp;
char *buf, *p;
int nfileSize;
char terminator = 0;
struct student src;
struct student dst;
src.name = “nihao”;
src.num = “123456”;
src.age = “18”;
//寫入文件
fp = fopen(“data.txt”, “wb+”);
fwrite(src.name.c_str(), 1, src.name.length(), fp);
fwrite(terminator, 1, 1, fp);
fwrite(src.num.c_str(), 1, src.num.length(), fp);
fwrite(terminator, 1, 1, fp);
fwrite(src.age.c_str(), 1, src.age.length(), fp);
fwrite(terminator, 1, 1, fp);
fclose(fp);
//從文件中讀取
fp = fopen(“data.txt”, “rb”);
fseek(fp, 0, SEEK_END);
nfileSize = ftell(fp);
fseek(fp, 0, SEEK_SET);
buf = (char*)malloc(nfileSize);
fread(buf, 1, nfileSize, fp);
p = buf;
dst.name = p;
p = p + strlen(p) + 1;
dst.num = p;
p = p + strlen(p) + 1;
dst.age = p;
free(buf);
fclose(fp);
printf(“Name: %s\nNum: %s\nAge:%s\n”, dst.name.c_str(), dst.num.c_str(), dst.age.c_str());
}
執行結果:
原創文章,作者:INVQ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/137875.html