C 需要串接字符串和空字符(\0)解释

C 需要串接字符串和空字符(\0)解释,c,C,现在在这个程序中,我尝试连接两个字符串,但当我不提供空字符到它的结尾时,它会在结尾产生一个未知值。现在我知道了空字符的重要性,但我想知道这里发生了什么,在连接字符串的末尾产生了随机值,它是什么 第一个代码:插入空字符 void main(){ char str1[10],str2[10],output_str[20]; int i=0,j=0,k=0; printf("Insert first string: "); gets(str1); pri

现在在这个程序中,我尝试连接两个字符串,但当我不提供空字符到它的结尾时,它会在结尾产生一个未知值。现在我知道了空字符的重要性,但我想知道这里发生了什么,在连接字符串的末尾产生了随机值,它是什么

第一个代码:插入空字符

void main(){
    char str1[10],str2[10],output_str[20];  
    int i=0,j=0,k=0;  
    printf("Insert first string: ");
    gets(str1);
    printf("Insert second string: ");
    gets(str2);  

    while(str1[i] != '\0')
        output_str[k++]=str1[i++];
    while(str2[j] != '\0')
        output_str[k++]=str2[j++];

    /*This the line which matters*/
    output_str[k]='\0';

    puts(output_str);
}
输入:第一个字符串:Bhushan
二线:门迪

输出: 布山门河

但是对于上面相同的代码和相同的输入,如果我只是删除代码中的“重要的行”。

输出为: 布山门河0♥↕@


我想了解为什么第二次输出中的粗体部分是在我们没有指定空字符时产生的,它叫什么?

put()读取给定的内存地址,直到遇到\0,如果没有指定\0,它只会继续读取内存(这是一些随机垃圾,可能来自上一个程序)。在一定内存量之后,它遇到\0并停止读取。如果你没有在末尾加上一个\0,你就有陷入分段错误的危险。

你确定这里没有拼写错误吗
while(str1!='\0')
和这里没有拼写错误while(str2!='\0')?我想你在循环条件下的意思是:
while(str1[I]!='\0')
while(str2[j]!='\0'))
观察到的行为独立于串联。试试这个
#include int main(void){char s1[4]=“abcd”;char s2[5]=“efgh”;put(s1)}
♥↕@我猜这意味着它爱你…@alk是的,我的意思和你说的一模一样,我已经编辑过了。非常感谢。或者简单地说,调用未定义的行为,将以非null结尾的字符串传递给希望以nul结尾的字符串作为参数的函数。非常感谢。我明白你想说什么,我同意你的看法@多米