为什么我们需要在C中的字符数组的末尾添加“ \ 0”(空)?我已经在K&R 2(1.9个字符数组)中阅读了它。书中查找最长字符串的代码如下:
#include <stdio.h> #define MAXLINE 1000 int readline(char line[], int maxline); void copy(char to[], char from[]); main() { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while ((len = readline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) printf("%s", longest); return 0; } int readline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; //WHY DO WE DO THIS??? return i; } void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; }
我的问题是为什么我们将字符数组的最后一个元素设置为’\ 0’?没有它,该程序就可以正常工作…请帮助我…
您需要以C字符串结尾,'\0'因为这是库知道字符串结束位置的方式(在您的情况下,这就是copy()函数所期望的)。
'\0'
copy()
没有它,程序就可以正常工作…
没有它,您的程序将具有不确定的行为。如果程序碰巧按照您的预期做,您就是幸运的(或者,倒霉的,因为在现实世界中,未定义的行为会选择在最不方便的情况下表现出来)。