首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

从文件读取字符串到字符数组联接为整型,输出非预期

2013-09-06 
从文件读取字符串到字符数组连接为整型,输出非预期从文件中读取数据,在连接成整型,头一个没问题,第二个就

从文件读取字符串到字符数组连接为整型,输出非预期
从文件中读取数据,在连接成整型,头一个没问题,第二个就全是非预期的数值,求解
文件读取查不出什么问题。
char dicii[256*sizeof(int)] = {0};
char dici1[256][sizeof(int)] = {0};
int dici[256] = {0};
//----------------省略----------
     fin.seekg(0,std::ios::cur);
    fin.read(cpq,3*sizeof(long long)); 
    fin.read(dicc,256); 
    fin.read(dicii,256*sizeof(int));
    for(int i=0,t=0;i<3;i++){
        for(int j=0;j<sizeof(long long);j++){
            cpq1[i][j] = cpq[t];
            t++;
        }
    }
    for(int i=0;i<3;i++) icpq[i] = *(long long*)cpq1[i]; //这个输出正常
     for(int i=0,t=0;i<256;i++){
        for(int j=0;j<sizeof(int);j++){
            dici1[i][j] = dicii[t];
            t++;
        }
    }
    for(int i=0;i<256;i++) dici[i] = *(int*)dici1[i]; //连接后输出非预期  ? 数组,连接,字符串,文件读写, sizeof
[解决办法]
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose  //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

[解决办法]
for(int i=0;i<256;i++) dici[i] = *(int*)dici1[i]; 
这是怎么回事,从文件读到的数据,如何可以当作指针使用????

[解决办法]

引用:
for(int i=0;i<256;i++) dici[i] = *(int*)dici1[i]; 
这是怎么回事,从文件读到的数据,如何可以当作指针使用????


链式结构,读入内存时都会重新分配内存的。
而不是使用,原数据的地址。


[解决办法]
引用:
Quote: 引用:

Quote: 引用:

for(int i=0;i<256;i++) dici[i] = *(int*)dici1[i]; 
这是怎么回事,从文件读到的数据,如何可以当作指针使用????

链式结构,读入内存时都会重新分配内存的。
而不是使用,原数据的地址。

从文件按字节读取数据到dicii[]中,不能用指针?不太明白,请详细

指针,只有在内存才有意义,在硬盘中的数据,如何确定指针指向何方。

如果要保持链式结构,存储时,使用 offset 记录数据在硬盘中的偏移量,按照链式结构存储在硬盘,指针改用offset

读出时,先读offset
然后顺链查找数据,,重新分配内存,重建连式结构。

因为指针存储到硬盘,不能保证,读取数据时,那块内存依然可用!

就是可用,一般链式结构的数据,都是动态分配内存的,那块内存还没有分配,不是你的,用了就会出问题!!!!!!

你可以把指针像存储为索引值,或者偏移量。
先存储,数据,然后按照链接写索引值,或者偏移量。

实际写就是在硬盘上重建连式结构。
而读取是在内存重建链式结构。

所有指针,存储指针的值,都不是很好地存储方式。

因为什么位置的内存,做什么用途,不在你的控制之下,而是由操作系统,编译器,库函数规划的。

如果你能够,自由安排,内存的使用,那么就是不成问题的。

否则,不要存储指针。




热点排行