-1
proc/stat 파일을 읽으려고했으나 다른 파일을 읽으려고했는데 완벽하게 작동 했으므로 코드가 작동한다고 확신하지 못했습니다. 여기 있습니다 코드 :리눅스에서 파일을 읽을 수 없습니다
#include <stdio.h>
#include <stdlib.h> // for the malloc
int main (int argc,char *argv[])
{
char *file_name = "/proc/stat";
char *contents;
FILE *file;
int filesize = 0;
file = fopen(file_name, "r");
if(file != NULL)
{
//get the file size
fseek(file, 0, SEEK_END);
filesize = ftell(file);
fseek(file, 0, SEEK_SET);
printf("the file size is: %d\n", filesize);
contents = (char *)malloc(filesize+1); // allocate memory
fread(contents, filesize,1,file);
contents[filesize]=0;
fclose(file);
printf("File has been read: %s \n", contents);
}
else
{
printf("the file name %s doesn't exits", file_name);
}
return 0;
}
하는 (FILE_NAME '파일 이름 % s이 (가) 없습니다 종료를 않습니다 ")'의 printf를 교체, perror는'와'(file_name); ' –
사용중인 모든 I/O 함수의 반환 값을 확인하지 않고 그에 따라 반응하는 경우 코드가 실패한 이유를 알 수 없습니다. 항상 호의를 베풀고 ** 항상 ** 모든 것을 확인하십시오. – Mat
malloc을 캐스팅하지 마십시오. 이 코드에서 malloc의 캐스트를 제거 할 때 오류가 발생하는 것은 C++ 컴파일러를 사용하고 있기 때문입니다. C++을 사용하려면 C++'new'를 사용하십시오. 그렇지 않으면 C 컴파일러를 사용하십시오. 두 언어의 공통 하위 집합으로 제한하는 것은 실행 불가능합니다. C++이 오늘날의 공통 C 라이브러리에 사용 된 지난 10 년 동안 채택하지 않은 C의 기능이 있습니다. C++ 컴파일러로는 이들을 빌드 할 수 없습니다. 이 코드를 읽기 쉽고 C++ 호환 코드로 변환하여 C++에서 컴파일하는 데 시간을 낭비 할 것입니까? C 컴파일러 만 사용하십시오. – Sebivor