Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何克服字符串连接中未定义的行为?_C_Arrays_String_Concatenation - Fatal编程技术网

C 如何克服字符串连接中未定义的行为?

C 如何克服字符串连接中未定义的行为?,c,arrays,string,concatenation,C,Arrays,String,Concatenation,我想用c连接字符串。因此,我编写了以下代码: #include <stdio.h> #include <string.h> int main () { char str1[20], str2[20]; int i=0; scanf("%20s",str1); getchar(); scanf("%20s",str2); getchar(); char str3[s

我想用c连接字符串。因此,我编写了以下代码:

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


int main () {
    char str1[20], str2[20];
    int i=0;
    
    scanf("%20s",str1);
    getchar();
    scanf("%20s",str2);
    getchar();
    char str3[strlen(str1)+strlen(str2)];

    for(i=0; str1[i]; i++){
        str3[i]=str1[i];
    }
    
    for(i=0; str2[i]; i++){
        str3[strlen(str1)+i]=str2[i];
    }
    
    printf("\nSum is: %s\n", str3);
    
    return 0;
}
为什么我会在str3的末尾得到随机字符? 我知道有一个函数可以做到这一点,但我想用一种基本的方法来实现。

因为您通过让printf读取超出str3的边界来调用未定义的行为

你必须

再分配一个元素以终止空字符。 i、 e.字符str3[strlenstr1+strlenstr2];应该是字符str3[strlenstr1+strlenstr2+1]; 在结果字符串的末尾放置一个终止的空字符。 i、 e.添加str3[strlenstr1+strlenstr2]='\0';在printf语句之前。
您不使用strcat的任何原因?您应该在此处为“\0”提供一个额外的字符:char str3[strlenstr1+strlenstr2];。是的,我不想使用函数。您没有在字符串末尾添加空字节。只需添加行str3[strlenstr1+strlenstr2]=0;,顺便说一句,你这里有很多不好的实践代码…除了:%20应该是%19非常感谢你: