gpt4 book ai didi

c - 文件描述符 : troubles in storing a read int value into a variable

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:17 24 4
gpt4 key购买 nike

我正在尝试使用文件描述符。我被教导使用文件流(fopen、fread 等),但现在我想了解使用文件的另一种方式。

我要发布的这段代码有点琐碎和愚蠢:它只是打开一个名为"file"的文件,该文件具有以下结构:4 个字符、一个整数和每行一个 '\n' 值。我并不想做任何有用的事情,我只是想做一些我以前使用流非常轻松地做的基本操作。特别是,我的文件包含以下信息:

row 1
row 2
row 3

“行”和空格代表4个字符,数字代表整数。我只想打印文件内容,但我想记住我遇到的 int 值(否则打印遇到的每个字符就足够了)在一个变量中(这样我可以根据该值做一些详细说明,如果我想到)。这是我使用的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>

int main() {
int fd;
fd = open("file", O_RDONLY);

char *buffer;

buffer = (char*)malloc(20*sizeof(char));
unsigned char x;
int y = -1;
int number = 1;
int i=0, j;

while(read(fd, &x, 1*sizeof(char)) > 0) {
for(j=0; j<3; j++) {
buffer[i] = x;
i++;
read(fd, &x, sizeof(char)); // or 1 instead of sizeof(char)
}
buffer[i] = x;
buffer[i+1] = '\0';
printf("byte read: %d\n", read(fd, &y, sizeof(int))); // or 4 instead of sizeof(int): it's the same
printf("number read: %d\n", y); // crap value
printf("%s%d\n", buffer, y);

read(fd, &x, 1); // discard the new line
i=0;
}
close(fd);
}

问题来了:当我尝试存储 int 值时,由于 sizeof(int) 表示 4 个字节,它只读取 4 个字符。因此,文件描述符前进了 4 个字符,而程序根本不执行我想执行的操作(它“吃掉”了以下字符:'\n'、'r'、'o')。我不明白如何判断后面的字符是一个整数,应该占用4个字节的内存。因此,如果尝试在文件中写入 4 位数字,格式显示是正确的,但它会记住一个错误的值(因为它看到 4 个字符,而不是数字......),这与文件中的整数无关.

如果我不能这样做,我正在考虑记住字符串中的数字,然后将字符串转换为数字..但是我看到一些代码与我在代码中所做的完全一样,所以我变得很困惑。

我在这里缺少什么?

最佳答案

您似乎混淆了在文件中打印为字符/字节的整数,以及程序中的 int 变量(如您所说,“占用 4 个字节的内存”)。

read() 函数只是从您的文件中读取字节(或char)。这个函数不知道你在读什么样的东西。

如果你想得到一个int,你需要将你读取的字节转换成一个int。看看sscanf() , strtol() , ...

顺便说一句,int 确实经常占用 4 个字节的空间,但情况并非总是如此;这取决于平台。

关于c - 文件描述符 : troubles in storing a read int value into a variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28769580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com