我是C編程語言的初學者,我對C編程語言中的空字符('\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;
}
}
'S [10]',這是'線[10]',一定不能被訪問(沒有讀取也不寫),因爲它是外的範圍。訪問它會調用*未定義的行爲*。 – MikeCAT
「這怎麼可能」,因爲你的C編譯器懶得生成代碼來檢查索引是否超出範圍?當* undefined behavior *被調用時可能發生任何事情。 – MikeCAT
這意味着它不會顯示錯誤? – naveenath