gpt4 book ai didi

c - 使用 read 函数读取文件

转载 作者:行者123 更新时间:2023-12-04 11:57:15 25 4
gpt4 key购买 nike

海湾合作委员会 4.4.1

我正在使用读取函数读取波形文件。但是,当它到达读取功能时。执行似乎停止并卡住。我想知道我是否做错了什么。

文件大小 test-short.wave 是:514K。

我的目标是一次将文件读入内存缓冲区 block 。目前我只是在测试这个。

非常感谢您的任何建议,

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
char buff = malloc(10240);
int32_t fd = 0;
int32_t bytes_read = 0;

char *filename = "test-short.wav";

/* open wave file */
if((fd = (open(filename, O_RDWR)) == -1))
{
fprintf(stderr, "open [ %s ]\n", strerror(errno));
return 1;
}
printf("Opened file [ %s ]\n", filename);
printf("sizeof(buff) [ %d ]\n", sizeof(buff));

bytes_read = read(fd, buff, sizeof(buff));

printf("Bytes read [ %d ]\n", bytes_read);

return 0;
}

=== 编辑更正 ===

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
char buff[10240] = {0};
int32_t fd = 0;
int32_t bytes_read = 0;
const char *filename = "test-short.wav";

fd = open(filename, O_RDWR);
if(fd == -1)
{
fprintf(stderr, "open [ %s ]\n", strerror(errno));
return 1;
}

printf("sizeof(buff) [ %d ]\n", sizeof(buff));
printf("strlen(buff) [ %d ]\n", strlen(buff));

bytes_read = read(fd, buff, sizeof(buff));
printf("Bytes read [ %d ]\n", bytes_read);

return 0;
}

最佳答案

  1. 您将指针分配给 char,而不是 char*
  2. 您读取了 sizeof(char)(可能是 1 个字节),而不是 10240。
  3. 您将数据读入任何 buff,转换为指针,指向,而不是 buff。
  4. Ignacio Vazquez-Abrams 提到的优先级问题仍然相关。
  5. 您在 char 上调用 strlen(),这没有多大意义。在填充应该是缓冲区的内容之前甚至更少。
  6. 您将 const char *(字符串文字)分配给 char*

编译器警告不是围绕着这段代码吗?

关于c - 使用 read 函数读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2728784/

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