2010-06-06 3 views

답변

8

foo을 초기화하지 않으므로 메모리에 다소 임의의 위치가 지정됩니다. 스택에 할당하십시오.) (

char *foo = (char *)malloc(10 * sizeof(char)); 

을하지만 malloc을 경우, 무료로 잊지 마세요 :

char foo[10]; 

또는 힙에 그것을 malloc에.

버퍼 오버 플로우에주의하십시오. 어떤 것이 버퍼를 차지하지만 최대 크기가 없다면 매우 조심해야합니다. 예를 들어 %9s을 수행하여 scanf의 최대 길이를 지정할 수 있습니다. scanf은 종료 null을 고려하지 않으므로 버퍼 길이보다 작은 하나를 전달해야합니다.

+0

scanf가 읽은 문자열을 저장할 충분한 공간을 할당해야합니다. 한 문자 만 할당하면 빈 문자열 외에 아무 것도 입력하지 않으면 정의되지 않은 동작 (세그 폴트 가능성이 높음)이 발생합니다. – user168715

관련 문제