"ahead of time"이라고 말하면 런타임시 또는 컴파일시를 의미합니까? 컴파일시에 이 작업을 수행 : 런타임에
char str[1000];
당신은이 작업을 수행 :
char *str = new char[size];
그들은 유일한 방법은 얻을 정확히 맞는 크기는 당신이 읽을려고 얼마나 많은 문자를 아는 것입니다. 파일을 읽는 중이라면 가장 가까운 개행 (또는 다른 조건)을 찾고 그 배열이 얼마나 큰지 정확히 알 수 있습니다. 예 :
int numChars = computeNeededSpace(someFileHandle);
char *readBuffer = new char[numChars];
fread(someFileHandle, readBuffer, numChars); //probly wrong parameter order
다른 방법은 없습니다. 프로그램의 관점에서, 사용자가 몇 개의 키를 누를지를 어떻게 알 수 있습니까? 가장 좋은 방법은 사용자 또는 입력을 제한하는 것입니다.
버퍼의 연결된 목록을 만들고 버퍼 덩어리를 할당 한 다음 나중에 연결하는 것과 같은 몇 가지 더 복잡한 작업이 있습니다. 그러나 나는 그것이 당신이 여기에서 원했던 대답이 아니라고 생각합니다.
편집 : 대부분의 언어에는 이것을 숨기는 string/inputbuffer 클래스가 있습니다.
논리적으로 생각하면, 어떤 종류의 버퍼에 저장되지 않았다면 문자열로 무엇을 할 것입니까? 입력 스트림의 일부분을 읽어 들인 다음 작은 버퍼와 동일한 블록으로 다시 할당되는 백엔드 저장소로 전달하는 작은 버퍼를 가질 수는 있지만 가장 효율적인 프로세스는 아닙니다. – Lazarus
나는이 페이지, 특히이 섹션을 읽을 필요가 있다고 생각한다. http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize –