wc 명령은 txt 파일에서 후행 개행 문자를 제거합니까?

wc 명령은 txt 파일에서 후행 개행 문자를 제거합니까?

wc현재 C에서 명령줄 호출의 복제본을 만들고 있습니다 . [tst.txt] 파일 tst.txt 과 해당 파일을 읽는 C 코드가 있습니다. 명령 은 2개의 개행 문자('\n')를 나타내는 wc tst.txt출력으로 응답합니다 . 2 6 20 tst.txt그러나 내 코드에는 3개의 줄 바꿈이 있습니다. 나는 이것이 때문이라고 추측한다.체계적인파일 끝에 새 줄이 추가됩니다(3번째 줄 다음).

이 명령이 후행 줄 바꿈(EOF의 후행을 의미함)을 제거한다고 생각하는 것이 맞습니까? wc아니면 내 코드가 올바르지 않습니까?

유닛을 하나 더 추가한 게 아닐까요?

이것은 내 코드입니다.

#include <stdio.h>
#include <string.h>

int checkForNewLine(char* line, int lineSize); 

int main(int argc, char **argv) {
    // declare variables
    FILE *inputFile;                        // pointer to inputted file
    inputFile = fopen(argv[1], "r");        // set input file to 2nd cmd-line arg.
    int newLineCount = 0;
    int newLineIncr = 0;

    // if file is not found
    if (inputFile == NULL){
        printf("%s", "File not found\n");
        return (-1);                        // end program
    }

    char line[201];                         // set line to 200 char MAX. 


    while (fgets(line, 201, inputFile) != NULL){

        // new line count
        newLineCount = newLineCount + checkForNewLine(line, 201); 
    } 
    if (feof(inputFile)) {
    } 
    else {
        printf("%s", "Some Other Error...");
    }

    printf("New Line Count [%d]\n", (newLineCount));

    fclose(inputFile);

}

int checkForNewLine(char *line, int lineSize){
    int count = 0;
    for (int i = 0; i < lineSize; i++) {
        if (line[i] == '\0'){
            count++;
            printf("count amount: %d\n", count);
            break;
        }
    }
    return count;
}

답변1

~에서man 3 fgets:

The fgets() function shall read bytes from stream into the array
pointed to by s, until n−1 bytes are read, or a <newline> is read and
transferred to s, or an end-of-file condition is encountered.

따라서 코드는 마지막 행을 계산합니다.끝에 개행 문자가 있는지 여부에 관계없이(그렇지 않습니다) EOF가 발생했기 때문입니다. 결국 checkForNewLine()함수는 개행 문자가 아닌 널 문자를 확인하고 있습니다. 등 od을 사용하여 hexdump입력 파일의 마지막 문자가 무엇인지 확인하십시오.

관련 정보