void finput(char filename[], double *filedata, long n)
{
int i=0;//for문을 위한 i
double sample_in;
FILE *input;//파일포인터 선언
input = fopen(filename, "rb");//파일 읽어오기
//파일 불러와서 배열 저장
while( fread(&sample_in,sizeof(short),1,input) != NULL )
{
i = i+1;
filedata[i] = sample_in;
}
fclose(input);//파일 닫기
}
이게 제가 만든건데요.
1>c:\users\s\documents\visual studio 2010\projects\pj2-2\pj2-2\pj2-2.c(98): warning C4047: '!=' : 'size_t'의 간접 참조 수준이 'void *'과(와) 다릅니다.
이딴 메세지가 fread부분에서 문제가 생기는것 같은데 뭔지 아시는분..?ㅠㅠ
fread는 읽은 파일의 갯수를 반환하지 않낭요;
포인터를 반환하지도 않는데 왜 NULL하고 비교를하지 아닐수도 있음 전 까막눈이라
그래서 파일 읽은거가 0개가 될떄까지 읽는건데 ㅠㅠ뭐가 잘못된건지 ㅠㅠ
인자중에 보이드 포인터를리턴하는게 있나본데?
size_t면 sizeof(short)요 부분 아님?
size_t는 부호있는 인트형이라는 말아닌가
아니다 ssize_t가 부호있는거니까 unsigned int 일텐데 size_t
뭐가 문젠지 ㅠㅠ 너무 어렵네요 ㅠㅠ변수에 대해 애매한거는 물어봐주세요 ㅠㅠ
fread 반환형이 size_t인데 NULL 이건 포인터 비교연산할때 쓰는데 NULL하고 비교해서 워닝 뜨는거아님 ㅡㅡ?
ㅁㅁ 말이 대략 맞아. == 는 같은 타입을 비교해. 한쪽은 int 고, 한쪽은 (void*) 타입이니 서로 틀린 타입비교한다고 머라고 하는거야.
그런것 같은데....이게 제가 ~~~.snd라는 음악파일을 배열에 저장하려고 하는거거든요 어떻게 해야할지 잘 모르겟네요 ㅠㅠ
NULL 이 0 이 맞지만, 이건 주소 \"0\" 을 말해. 정수 0 이 아니야. 졸 간단한 문제야 . 혼란스러워 하지마.
그럼 더이상 읽을게 없다는 의미로 NULL이 나오는 것을 의미하게 하려면 어떻게 해야하는거죠..?
feof() 쓰면 되지않냐;
size_t fread((void*) buffer, size_t size, size_t count, FILE* stream);
파일 읽고, 얼마나 성공적으로 읽었는지 반환값을 통해서 확인하고, 그로 부터 앞으로 얼마나 더 읽어야 할지 계산하고, 다시 또 읽고, .이걸 파일끝까지 반복.
while에 저 함수 쓰고
고수분 오셨으니 전 빠이 ㅎㅎ 난도 학생이라
fread는 10바이트를 읽으라고 요청했을때, 항상 10바이트를 읽지 않아. 가능한한 10바이트를 읽는거야. 따라서 반환값을 항상 체크해야해. 이게 무슨말인지 레퍼런스좀 찾아보고 다시 해봐.
근데 그 반환값이라는게 0이 될때까지 읽는건데 ....죄송한데 어떻게 하라고 딱 집어서 말씀해주실수없나요?ㅠㅠ
C는 이제 안되겠당 끼질 말아야지... 대학교때 배운실력으로 답변달았더니 헛소리만 했넹
fread(&sample_in,X,1,input) != X (X는 int형 상수로) 이러면 끗.
ㄴ cpu사용률조금만 높이면 위 코드는 대번에 버그가 재현돼.
레노미나//복잡하게 돌릴일 없어 보여서 걍 대충 끄적댔는데 세심하게 한다면야 뭐 seek류라도 끄적여주면...