OK,let's look at my greatness !
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
char str1[999];
fgets(str1,999, stdin);
char str2[999];
fgets(str2,999, stdin);
char str3[999] = {0};
strcpy(str3,str1);
int a = strlen(str2);
for (int i = 0; i < a; i++) {
str3[strlen(str1)-1+ i] = str2[i];
}
for (int i = 0; i < strlen(str3)-1; i++) {
printf("%c",str3[i]);
}
return 0;
}
真的花了点时间呀,不过值得
第一点,从int a = strlen(str2);开始出现问题
定义的时候给出了str1和str2很大的内存大小(999)
这就导致(测试点不至于超过999这么变态吧?)两次fgets都不会舍命陪君子,换行符都会被保留,当然,字符结束符\0肯定伴你同行
那么问题来了,strlen这孩子很懂事,它不会计算\0的占用情况,所以结果是包含换行符在内的字符串数量
我们知道,正常情况下,str[strlen(str)]是字符结束符的存储地方
//这句话很重要,这里说的是仅是字符数组的情况(md,废话,strlen就只能用于字符数组)
因为数组下标从0开始,strlen的数值不包含\0,这正好构成了这个情况
str3[strlen(str1)-1+ i] = str2[i];
所以这一步,我们要想替换字符结束符和换行符,本质是考虑替换换行符,应该字符结束符在后面,只要实现了换行符替换的操作就自然大功告成了
strlen( str1 )是字符结束符,那么换行符就应该还要减一,这就是为什么要加上-1的原因!!!
下次抽空再谈谈strcat函数,bye
Comments NOTHING