Я новичок в языке программирования C, я очень смущен нулевым символом ('\0'
) на языке программирования C.Массивы символов в C?
На основании нижеприведенной программы длина разрешенного символа для линии равна 10
(MAXLINE
определяется как 10
). Вход, такой как Navindren
длины 9, занимает индексы массива 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;
}
}
's [10]', который является 'lines [10]', не должен быть доступен (не читать и не писать), поскольку он выходит за пределы диапазона. Доступ к ней вызовет * неопределенное поведение *. – MikeCAT
«как это возможно», потому что ваш компилятор С слишком ленив, чтобы генерировать код, чтобы проверить, не превышает ли индекс этот параметр? Все, что может случиться, когда вызывается * неопределенное поведение *. – MikeCAT
Это значит, что изображения не будут отображаться? – naveenath