两个程序所表达的不是一样吗,为什么结果不同

img


这两个程序不一样吗,一个for循环,一个while循环,为什么第二个输出不了两个字符串合并。第一个能

你想把s2的字符串添加到s1中,那么定义数组的时候s1一定要比说s2大。
错误原因

img


str2[j]!='\0'

img

代码

char str1[40];
    char str2[20];

    gets(str1);
    gets(str2);

    int i=0;
    for(;str1[i]!='\0';++i)
    {

    }
    for(int j=0;str2[j]!='\0';++j)
    {
        str1[i]=str2[j];
        i++;
    }

    /*
    //int len=strlen(str1);
    int len=0;
    while(str1[len]!='\0')
    {
        len++;
    }

    int j=0;
    while(str2[j]!='\0')
    {
        str1[len]=str2[j];
        len++;
        j++;
    }
    */

    printf("%s",str1);

#include <stdio.h>
#include <string.h>

int main()
{
    /*
    char str1[20] = "bbbbb";
    char str2[20] = "aaaaaa";

    int i, j = 0;
    while(str1[i] != '\0') i++;
    while(str2[j] != '\0')
    {
        str1[i] = str2[j];
        i++;
        j++;
    }
    //结果:bbbbbaaaaaa
    */
    char str1[20] = "bbbbb";
    char str2[20] = "aaaaaa";

    int i, j = 0;
    for(i = 0; str1[i] != '\0'; i++);
    for(j = 0; str2[j] != '\0'; j++, i++) str1[i] = str2[j];
    str1[i] = '\0';
    printf("%s\n", str1);
    //结果:bbbbbaaaaaa

    return 0;
}

在长度不越界的情况下,两种结果是一样的,你两种情况不一样,有可能是长度越界了,可以用申请堆区的方法,这样就不怕了,不过代码多一点
个人理解,如有错误,欢迎指正。