我是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