gcc 4.4.1
我正在使用read函数读取wave文件。但是,当它进入读取功能时。执行似乎停止并冻结。我想知道我是否做错了。
文件大小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;
}
===编辑更正===
#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;
}
答案 0 :(得分:5)
char
,而不是char*
。sizeof(char)
(可能是1个字节),而不是10240。buff
,转换为指针,指向,而不是buff。strlen()
,这没什么意义。在填充应该是缓冲区之前更少。const char *
(字符串文字)分配给char*
。此代码周围是否没有编译器警告?
答案 1 :(得分:4)
==
的优先级高于=
:
if((fd = open(filename, O_RDWR)) == -1)