필자는 입력하는 동안 입력 문자열을 동적으로 할당하기 위해 길이가 긴 문자를 사용자에게 묻지 않고 다음 함수를 작성했습니다.입력 문자열의 동적 할당
#include<stdio.h>
#include<stdlib.h>
char* dyninp (char str[], int *n) {
char ch;
int i = 0;
do {
ch = getchar();
str = (char *) realloc(str, (i+1)*sizeof(char));
str[i] = ch;
i++;
} while (ch != '\n');
/*substitute '\n' with '\0'*/
str[i-1] = '\0';
if (n != NULL) {
/*i contains the total lenght, including '\0'*/
*n = i-1;
}
/*because realloc changes array's address*/
return str;
}
/*it is called in this way:
char *a;
int n;
a = dyninp (a, &n);
*/
이 코드는 작동하지만, 나는 그것에 대해 몇 가지 질문이 있습니다
이 이가 왜 작동 하는가를?
이유를 모르겠지만 실행하면 Enter 키를 누르기 전에 문자를 삭제할 수 있습니다.getchar()
함수는 각 반복마다 하나의 문자 만 읽습니다.이 문자는 배열에 쓰여지므로 어떻게 문자를 삭제할 수 있습니까?
'\ 127'을 받았을 때getchar()
이 이전 문자를 삭제하면 루프는 다른 문자와 마찬가지로 계속 실행되어야합니다. 그러나 이것은 루프가 끝날 때 "i"에 항상 정확한 수의 요소가 포함되어 있기 때문에 발생하지 않습니다.내 코드가 효율적입니까? 그렇지 않은 경우 어떻게 내장 함수를 사용하여 더 잘 만들 수 있습니까? 첫 번째 질문에 대한