1、经过对书本程序的编写,我发现了这道题一些错误的地方,别进行了修改,下面给大家分享一下这个代码,并且给新学的朋友一点帮助。
2、修改后可以成功使用的代码,修改的地方用注释表示出来。
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
int main()//书本上的没有定义main函数类型
{
int len;
int max;
char line[MAXLINE]="0";//对数组初始化,否则没有\0结束,会出现烫烫烫
char longest[MAXLINE]="0";//同理
max = 0;
while ((len = getline(line, MAXLINE)) > 0)
{
if (len > max)
{
max = len;
copy(longest, line);
}
}
if (max > 0)
printf("%s", longest);
return 0;
}
int getline(char s[], int lim)
{
int c, i;
c=0;//原始代码中没有初始化,会有警告
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';//\0是给字符串加一个结束符号,\n的话可以实现换行
return i;
}
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')//没有碰到\0就一直赋值,相当于复制过去,!=的优先级在赋值之前
++i;
}
为什么数组没有初始化会出现烫烫烫烫烫?因为字符串没有初始化或者字符数组长度大于字符串,而没有’\0’结束符.
未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个"字符串"被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个"烫"字。"屯"字也是一样的原因。
C语言代码修改及未初始化数组问题解析
博主分享了书本程序修改后的C语言代码,为新学者提供帮助。同时解释了数组未初始化出现“烫烫烫”的原因,即字符串未初始化或字符数组长度大于字符串且无结束符,未初始化变量被赋初值0xCC,超出ASCII码范围,被系统当成宽字符组成的字符串。
2946

被折叠的 条评论
为什么被折叠?



