C 使用read函数读入文件

C 使用read函数读入文件,c,C,通用条款4.4.1 我正在使用read函数读取wave文件。但是,当它到达read函数时。死刑似乎停止并冻结。我想知道我是不是做错了什么 test-short.wave文件大小为:514K 我的目标是一次将文件读入内存缓冲区块。目前我正在测试这个 非常感谢您的建议 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <str

通用条款4.4.1

我正在使用read函数读取wave文件。但是,当它到达read函数时。死刑似乎停止并冻结。我想知道我是不是做错了什么

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

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

非常感谢您的建议

#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
内部主(空)
{
char buff=malloc(10240);
int32_t fd=0;
int32字节读取=0;
char*filename=“test short.wav”;
/*打开波形文件*/
if((fd=(open(filename,O_RDWR))=-1))
{
fprintf(stderr,“打开[%s]\n”,strerror(errno));
返回1;
}
printf(“打开的文件[%s]\n”,文件名);
printf(“sizeof(buff)[%d]\n”,sizeof(buff));
字节_read=read(fd,buff,sizeof(buff));
printf(“字节读取[%d]\n”,字节读取);
返回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;
}
#包括
#包括
#包括
#包括
#包括
#包括
内部主(空)
{
char buff[10240]={0};
int32_t fd=0;
int32字节读取=0;
const char*filename=“test short.wav”;
fd=打开(文件名,O_RDWR);
如果(fd==-1)
{
fprintf(stderr,“打开[%s]\n”,strerror(errno));
返回1;
}
printf(“sizeof(buff)[%d]\n”,sizeof(buff));
printf(“strlen(buff)[%d]\n”,strlen(buff));
字节_read=read(fd,buff,sizeof(buff));
printf(“字节读取[%d]\n”,字节读取);
返回0;
}

=
的优先级高于
=

if((fd = open(filename, O_RDWR)) == -1)
  • 将指针指定给
    char
    ,而不是
    char*
  • 您读取的是
    sizeof(char)
    (可能是1个字节),而不是10240
  • 将数据读入buff,转换为指针,指向,而不是buff
  • 伊格纳西奥·巴斯克斯·艾布拉姆斯提到的优先权问题仍然相关
  • 在char上调用
    strlen()
    ,这没有多大意义。在填充应该是缓冲区的内容之前,甚至更少
  • const char*
    (字符串文字)分配给
    char*

  • 编译器警告不是蜂拥在这段代码周围吗?

    我已经做了更正。实际上,我使用下面的-Wall-Wextra-ggdbI编译代码,我希望编辑后的代码能够正常工作。也就是说,在输出中输入10240、0和10240(前提是文件更大,并且根据您的说法,文件更大)。