입력 문자열이 미리 정의 된 제한을 초과하면 fgets에 약간의 문제가 있습니다. 아래의 예 촬영어떻게 fgets 오버플로 후 입력 버퍼를 지우시겠습니까?
: 나는 길이 MAXLEN을 초과하는 문자열을 입력 할 때 지금
for(index = 0; index < max; index++)
{printf(" Enter the %d string : ",index+1)
if(fgets(input,MAXLEN,stdin))
{
printf(" The string and size of the string is %s and %d \n",input,strlen(input) + 1);
removeNewLine(input);
if(strcmp(input,"end") != 0)
{ //Do something with input
}
}
, 내가 입력이 MAXLEN에서 '\ 0'을 추가합니다 -1 그게 될 것을 알고있다. 나는 그래서 즉
Output :
Enter the first string : Aaaaaaaaaaaaaaaaaaaa //Exceeds limit
Enter the second string : Enter the third string : ....Waits input
을 요구하지 않는 2 문자열을 입력 할 때 문제가 발생, 나는
return
를 입력 할 때까지 기다립니다 C.에서 나는이 (가) 표준 방식을 버퍼 취소해야한다고 생각
두 번, 문자열에 처음 추가 될 때 다음 번에 다른 반환으로 더 많은 입력을 기대합니다. 1. 추가 반환 값을 입력하지 않고 버퍼를 지울 수있는 방법이 있습니까? 2. 동일한 오류 처리를 구현하려면 어떻게해야합니까? fgets 반환 값은 null이 아니며 strlen (input)이 fgets에 의해 허용되는 문자열 크기를 제공하기 때문에 수행해야 할 작업은 무엇입니까?
덕분에 많은
게시자가 계속 게시물을 올리면 다른 사람의 답변은 앞으로는 의미가 없습니다. SO는 특정 문제를 해결하는 것을 목표로하지 않으며, 다른 사람들이 답을 찾는 데 도움이됩니다. – P0W
되돌릴 수 있습니다. 죄송합니다! – Hooli
@IDK 되돌아 가지 말아주세요, 지금 당장 질문하는 것 같아요 ... – Gangadhar