fread 함수를 사용하여 파일에서 문자열을 읽고 문자열을 출력하고 있습니다. 문자열을 LONGNUM 크기 (미리 정의 된 값) 인 char 배열로 정의했습니다. 매번 1 엘리먼트의 1 바이트 크기를 읽었습니다. 문자열을 인쇄 할 때 : printf ("읽은 문자열은 % s \ n", 버퍼); 출력은 다음과 같습니다. 읽은 문자열은 입니다. 문자열의 끝에이 값이 나타나는 이유는 무엇입니까? 문자열을 인쇄 할 때 : printf ("읽은 문자열은 % c \ n", 버퍼 [0]); 값없이 쓰기 출력을 얻습니다. 이유를 설명해주세요.% s 인쇄 문자열이 잘못된 데이터를 인쇄합니다.
코드는
#include <stdio.h>
#define LONGNUM 1
void main(int argc,char *argv[])
{
FILE * src;
FILE * dst;
int num;
char buffer[LONGNUM];
// argc is the number of the elements in argv
// the first argv element is the name of the program
if(argc < 3){
printf("prototype error <source path> <dest path>\n");
return;
}
printf ("source path is : %s \n",argv[1]);
printf ("dest path is : %s \n",argv[2]);
src = fopen(argv[1],"r");
while(!(feof(src))){
num = fread(buffer,1,1,src);
printf("the number of items read %d\n",num);
printf("the string that read is %s\n",buffer);
//printf("the string that read is %c\n",buffer[0]);
}
}
입니다 당신이 그것을 할 수있는 쓰기 방법이 무엇인지 나에게 조언을하고 싶습니다. 감사합니다. .
'% s'은 적어도 2 바이트가 필요합니다. 그래서'LONGNUM'은 적어도 2 여야하고 문자열에 한 문자를 읽으려면'% 1s '를 지정해야합니다. 한 문자를 읽으려면'% c '를 사용할 수 있지만'string '은 null로 끝나지 않습니다. 더 현명하게,'LONGNUM'을 128 또는 4096 또는 다른 큰 것으로 설정하십시오. –
while (! (feof (src))는 부적절한 항목을 테스트하고 알아야 할 항목을 테스트하지 못하기 때문에 잘못되었습니다. 결과적으로 사용자가 알고 있어야하는 항목을 테스트하는 데 오류가 발생합니다. 실제로 이것이 실제로 발생하지 않았을 때 성공적으로 읽었습니다. –
@SumitGemini : 표준 x-ref 질문은 ['while (! feof (file))은 항상 잘못되었습니다.] (http://stackoverflow.com/questions/5431941/while -feof-file-is-always-wrong). –