코딩 과정에서 그 크기를 가늠할 수 없고, 개행 문자와 공백을 포함한 무지 긴 글을 stdin으로 입력받아서 개행문자까지 전부 특정 메모리 공간에 넣기 가능해..?
일단 연결리스트 동적으로 만들어서 각각의 노드에 한글자씩 fgetc로 받아가면서 500노드 600노드 이어버리는 방식 전에 구현해봤는데 얘는 글 전체 용량보다 포인터 용량이 더 커져버리는 너무 비효율 방식이고
stdin의 입력 글자수 센 다음 그만큼 동적 배열 할당해서 거기다가 넣는 방식 하려고 했는데, stdin에서 EOF를 만나고 나면 stdin에 fseek(stdin, 0, SEEK_SET);하는게 안 먹혀서 이쪽 하는 방법을 모르겠음
일단 연결리스트 동적으로 만들어서 각각의 노드에 한글자씩 fgetc로 받아가면서 500노드 600노드 이어버리는 방식 전에 구현해봤는데 얘는 글 전체 용량보다 포인터 용량이 더 커져버리는 너무 비효율 방식이고
stdin의 입력 글자수 센 다음 그만큼 동적 배열 할당해서 거기다가 넣는 방식 하려고 했는데, stdin에서 EOF를 만나고 나면 stdin에 fseek(stdin, 0, SEEK_SET);하는게 안 먹혀서 이쪽 하는 방법을 모르겠음
일단 그게 진정한 인터렉티브 인지 여부부터 생각해야 한다고 봐. 만약 사용자 입력을 실시간으로 받는 등의 진짜로 입력의 크기를 예상할 수 없는 케이스면, 하려는게 거의 넌센스임.
너가 말한 스트림의 크기를 가늠할 수 없다는게 실제로 현 시점에서 알 방법이 없는건지, 아니면 파일의 끝을 측정할 수 있는 스트림이 stdin에 들어온건지 구분해줘
실시간은 아니고, 후자처럼 ‘프로그램 사용자가 입력한 만큼의 문자열’을 그대로 저장하고자 하는거야. ‘크기를 가늠할 수 없는’ 이라는 조건은 그 문자열을 저장하는 공간이 동적이어야 한다는거고 python은 그게 쉽게 될거 같은데 c에서의 해결을 모르겠어
vector에 넣으면 안 돼?
ㄹㅇ c++이면 vector string 하면 될 거 같은데 ansi c 기준으로 생각해봐도 연결리스트에 글자 1개씩이 아니라 100글자씩 받아도 되는 거 아닌가
오 c로 배우고 c++은 백준 기본이 c++이라 쓰는 단계라서 모르는 개념인데 한번 배워봐야겠네요! 리스트에 100글자씩 받는건 리스트 프린트할때 조금 더 귀찮아지더라고요
일단 내가 이해한게 맞다면 파일의 끝은 이미 입력받을때 부터 존재해야 하는게 맞음. 너꺼 구현이 어떻게 돼있는지 잘 모르긴하는데, 동적으로 갈 필요가 없을꺼임 혹시 fstat(0) 확인해봄?
fstat(0).st_size
이런 걸 하는 또다른 방법은 mmap으로 주소공간을 엄청 크게 예약하되 실제로 할당은 안 한 다음에, 데이터가 들어오면 한 페이지(4k)씩 할당하는 거긴 함.
fastio 코드 참고 ㄱㄱ