2条回答 默认 最新
- DY老王 2020-12-02 23:30关注
首先,我觉得你的逻辑应该是想找出数组s1和s2中不同的字符,放在数组s3中,再输出s3。
有两个点的错误。
1. C语言的字符串是有结尾标志的,即'\0'。但是在字符串(字符数组)s3中并没有结尾符,这是导致你输出的时候内存溢出的根本原因。
2. 在第15行的输出语句是有毛病的,它输出的是数组s3每一个元素的地址。C程序在使用printf输出字符串的时候,是可以传首字符的地址作为参数的,这是OK的。不过前提是这个字符串(即字符数组)是带有结束符标志的,这样程序才知道我输出到哪里就可以结束输出了。因为s3字符串不带结束符,所以程序会一直往后寻找结束符,就导致程序访问了不该访问的内存,即内存溢出。
修改方案:
1.以字符的形式逐个输出s3;
for (i = 0; i < m; i++) { printf("%c", s3[i]); }
2.在字符串s3后面添加一个'\0'结束符,直接输出一次首元素地址即可;
s3[m] = '\0'; printf("%s", s3);
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报