目录
一、未初始化数组
1、打印出乱码
在数组不初始化的情况下数组中的元素为未知值会出现乱码,若赋值时忘记’\0'时甚至会出现越界。
int main()
{
char s1[50];
s1[50] = 'a', 'b';
printf("%s",s1);
return 0;
}
2、在对接字符串时出现概率性成功事件
#include <stdio.h>
int main()
{
char s1[100], s2[50];
int i = 0, j = 0;
printf("请输入s1的内容:");
scanf("%s", s1);
printf("请输入s2的内容:");
scanf("%s", s2);
while (s1[i] != '\0')
i++;
while (s2[i] != '\0')
s1[i++] = s2[j++];
s1[i] = '\0';
printf("\ns1,s2合并后为:%s", s1);
return 0;
}
在这个例子中,第二个循环的条件s2[j]中的j打错成i会出现在s1长度大于s2时可能可以正确合并完成任务。但是当s1长度小于s2时就不能完成任务。
在s1大于s2的情况下可以完成任务是在因为s2未初始化在其后的随机值中有一个‘\0’使得循环停止。在打印时只打印到第一个'\0'停止故可以完成任务。但是若随机中没有‘\0'就会导致数组越界。
在s1小于等于s2时不能完成任务的情况如下。
s2在刚开始循环就读到了’\0‘故停止了循环不能完成任务。
二、未定义数组大小
1、数组越界
忘记定义数组大小只初始化数组,数组大小为1,即 初始化时只有‘0’元素。同时因为越界超出数组的元素丢失。
int main()
{
char str[] = { 0 };
scanf("%s", str);
}