2016-10-25 2 views
-1

A는 리눅스 버전의 다음 C ANSI 코드를 가지고 2.6.32-431.11.2.el6.x86_64fprintf의 길이 제한이 있습니까?

cBuffer이

int bfnAddOutputFile(FILE *fpOut, char *cBuffer){/**/ 

     fprintf(fpOut, "%s",cBuffer); 

     //code 

     return (TRUE); 
    } 

때를 같이 숯불에 대한 포인터입니다

fprintf(fpOut, "%s",cBuffer); 

는 fprintf은, 핵심, 그것 인 fprintf 보낼 수 있습니다 캐릭터의 항목 최대 길이가 있습니다

Program received signal SIGSEGV, Segmentation fault. 
    0x00000038b2e6723e in fputs() from /lib64/libc.so.6 

덤프 생성을 실행하고 있는지 그 숫자는 무엇인가?

+0

은'cBuffer' ASCIIZ 문자열입니까? –

+1

왜 당신이 충돌하고 있는지 불분명합니다. 왜 그것이 길이 문제라고 생각합니까? – 2501

+1

관련 게시물 [printf/fprintf c99에 따른 최대 크기] (http://stackoverflow.com/questions/8119914/printf-fprintf-maximum-size-according-to-c99)를 살펴보십시오. –

답변

3

cBuffer에는 null 종료자가 포함되어 있지 않으므로 fprintf은 메모리 경계를 초과합니다. 는 C - 문자열을 출력하는 동안 그들이 널 (NULL) 종료 ('\0')를 발생하고, 그렇지 않으면 갈 수있을 때 그들은 이 속하지 않는 출력 메모리의 조각을 시도 할 때까지

printf -family 기능 만 정지을 프로그램에 추가하면 세그먼트 화 오류가 발생합니다.

+0

OP의 경우는 아니지만, 필드 폭이 주어지면'[f | s] printf'가 문자열 터미네이터를 만나기 전에 멈출 수 있습니다. –

+0

cBuffer가 너무 작아서 null 종결자가 fprintf에 포함되지 않았습니다. –

+0

@ JohnBollinger 용의자 _field_ width가 아니라 _precision_을 의미합니다. – chux

관련 문제