为什么输入大于等于4输出只有6.0

#include<stdio.h>
#include<string.h>
void funstr(char p[], char q[], int m)
{
int k = strlen(q);
for(;p[m]!='\0';m++)
q[m] = p[m];
q[m] = '\0';
}

int main()
{
char a[100] = "theVisualc++";
char b[100] = "6.0";
int m;
scanf("%d", &m);
funstr(a, b, m);
puts(b);
return 0;
}

字符串b的第四个元素为b[3]=‘\0’。当你输入大于等于4时,把a字符串往b上加,假设你输入是4,那么是从b[4]=a[4],b[5]=a[5]依次加到b中。但是b[3]依然等于‘\0’。输出字符串时,遇到'\0'便结束输出,所以后面的字符无法输出。

因为funstr是把数组a插入数组b[m]处,而数组b[3]='\0',puts遇到b[3]就结束了,后面的都不会输出。

因为funstr函数里面的for循环,m每次迭代都增加1,所以当开始字符位置m大于4,即b字符串前面的"6.0"没有被更改,包括结尾的空字符'\0',所以puts(b)就是打印b原来的字符串,如果开始字符位置小于4,如3,结尾的空字符被替换了,然后直到传入的p字符串结尾全被复制到了q函数(即main函数里的b),所以会打印如"6.0Visualc++"的字符串。