C程序设计语言:1.9把最长的文本打印出来问题

C语言代码修改及未初始化数组问题解析
博主分享了书本程序修改后的C语言代码,为新学者提供帮助。同时解释了数组未初始化出现“烫烫烫”的原因,即字符串未初始化或字符数组长度大于字符串且无结束符,未初始化变量被赋初值0xCC,超出ASCII码范围,被系统当成宽字符组成的字符串。

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表示的宽字符正好是乱码中的那个"烫"字。"屯"字也是一样的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值