从C中的文件打印短裤

时间:2015-01-27 16:49:35

标签: c printf

嘿伙计们我正在学习C并且我在网上搜索但无法找到任何帮助。我试图从文件中读取字节,将它们保存到缓冲区,然后将它们打印为短路。但到目前为止我的代码有一些问题,即使它看起来合乎逻辑。我很感激帮助:

//print shorts

// write bits into the buffer 
int buffer[1600];
fread(buffer, 1, 1600, myfile);


//take them out as shorts from the buffer
int shrtcnt = 0; // short count
while (shrtcnt < 160){
    int nxtshrtcnt = shrtcnt + 16;
    printf("This is a short: ");
    for (int a = shrtcnt; a < nxtshrtcnt; a++){
        printf("%d", buffer[a]);
    }
    printf("\n");
    shrtcnt += 16;
}

这打印出一些数字,但它们并没有接近我的预期。有任何想法吗? 我创建了一个文件并将值放在自己身上。我应该得到的值是1112131415161718我得到像&#34; 192153000655350-20330470760655350-16777216-655360-655360000&#34;说实话,它看起来像是随机的。

2 个答案:

答案 0 :(得分:0)

您使用fread(buffer, 1, 1600, myfile);来阅读short

这是错误的,因为short不一定是1个字节。请改用sizeof(short)并将数组声明为short数组。

答案 1 :(得分:0)

您展示的代码示例甚至不使用short关键字。 int和short不是(必然)相同的大小类型。

无论如何,使用fread()来读取1600个int的数组通常需要像

一样
fread(buffer, sizeof(int), 1600, myfile);

检查fread()的返回值也是个好主意。如果sizeof(int)为4,并且文件总共包含400个字节,则fread()可能返回100,表示它只能成功读取100个int。毕竟,从一个只包含400个字节的文件中,不可能在单个fread()语句中读取6400个字节(4 * 1600 = 6400)。

相关问题