Hello, world! 를 거꾸로 출력하는 문제에서 코딩을
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char* buffer;
int size;
int count;
char temp;
FILE* fp = fopen("words.txt", "r+");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
buffer = malloc(size + 1);
memset(buffer, 0, size + 1);
fseek(fp, 0, SEEK_SET);
count = fread(buffer, size, 1, fp);
for (int i = 0; i < size / 2; i++)
{
temp = buffer[i];
buffer[i] = buffer[size - 1 - i];
buffer[size - 1 - i] = temp;
}
fwrite(buffer, size, count, stdout);
fclose(fp);
free(buffer);
return 0;
}
이렇게 짜니 비주얼 스튜디오에서는 거꾸로 잘 출력됩니다. 다만 메모장을 켜서 확인을 해 보니 Hello, world! 그대로 있고, stdout 매크로를 그냥 fp 로 설정하고 프로그램을 돌린 후 메모장을 보니 Hello, world!!dlrow, olleH 로 출력이 되더군요. 혹시 몰라 파일 오픈 시 r, w+ 나 w 로도 시도 해 봤는데 이 때는 메모장 내용이 사라졌습니다. r, w나 w+는 내용을 덮어쓰는 파일 모드인 걸로 아는데, 왜 내용이 사라지고, 왜 r+에서는 내용이 뒤이어 써지는지 모르겠습니다. 파일의 원래 내용인 Hello, world!를 삭제시켜 !dlrow, olleH만 출력시키는 방법도 모르겠고요.