저는 C 프로그래밍 언어의 초보자입니다. C 프로그래밍 언어의 null 문자 ('\0'
)에 대해 매우 혼란 스럽습니다.C의 문자 배열?
아래 프로그램에 따르면 한 줄의 허용 문자 길이는 10
(MAXLINE
은 10
으로 정의 됨)입니다. 길이가 9 인 Navindren
과 같은 입력은 배열 색인 0
~ 8
을 차지합니다. 줄 문자가 도달 할 때마다 색인 9
에 추가되고 i
은 1
만큼 증가합니다. i
은 10
이고 s[10]
은 '\0'
, s[10] = '\0'
으로 지정됩니다.
여기에 혼란이 있습니다. 배열은 인덱스 0
- 9
의 할당 된 공간이기 때문에 어떻게 가능합니까? 나는 많은 온라인 자원을 언급하는 것을 시도했다 그러나 설명은 충분하지 않다.
주요 기능 :
#include<stdio.h>
#define MAXLINE 10
int getline(char line[], int maxline);
void copy(char to[], char from[]);
main() {
int len; /*current line length*/
int max; /*maximum length seen so far*/
char line[MAXLINE]; /*current input line*/
char longest[MAXLINE]; /*longest line saved here*/
max = 0;
while ((len = getline(line, MAXLINE)) > 0) {
printf("%d\n", len);
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) /* there was a line */ {
printf("%s", longest);
} else {
printf("No Lines Detected\n");
}
return 0;
}
의 getline 함수 :
int getline(char s[], int lim) {
int c;
int i;
for (i = 0; i < MAXLINE - 1 && (c = getchar()) != EOF && c != '\n'; i++) {
s[i] = c;
}
if (c == '\n') {
s[i] = '\n';
++i;
}
s[i] = '\0';
return i;
}
복사 기능 :
가/*copy: copy `from` into `to`; assume to is big enough*/
void copy(char to[], char from[]) {
int i;
i = 0;
while ((to[i] = from[i]) != '\0') {
++i;
}
}
'lines [10]'인's [10]'은 범위를 벗어 났으므로 액세스 할 수 없으며 (읽지도 쓴 것도) 말아야합니다. 그것에 접근하면 * 정의되지 않은 동작 *이 호출됩니다. – MikeCAT
C 컴파일러가 인덱스가 범위를 벗어 났는지 확인하는 코드를 생성하기가 너무 어렵 기 때문에 "어떻게 가능합니까?" * 정의되지 않은 동작 *이 호출 될 때 어떤 일이 발생할 수 있습니다. – MikeCAT
즉, 오류가 표시되지 않습니다. – naveenath