字符串的串联和所需的空字符(\ 0)说明

时间:2018-02-25 09:00:21

标签: c

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

第一个代码:插入空字符

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
              第二串:Mendhe

输出: BhushanMendhe

但对于具有相同输入的相同上述代码,如果我只是删除代码中的'重要的行。'

输出为: BhushanMendhe 0♥↕@

我想理解为什么当我们没有指定空字符时会产生第二个输出中的粗体部分以及它被称为什么?

1 个答案:

答案 0 :(得分:2)

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