关于#C语言#字符串函数的问题,如何解决?

这里为什么会多个引号呢? 明明两次都是拼接的"非"

img


源码:


#include 
#include 
#define SENT_LEN 5
#define WORDS_NUM 2
#define STR_LEN 101

int main(int argc, char** argv)
{
    int i, j;
    char words[SENT_LEN][STR_LEN] = {"非","淡泊","无以","明志","!"};
    char source[WORDS_NUM][STR_LEN] = {"淡泊","明志"};
    char target[WORDS_NUM][STR_LEN] = {"宁静","致远"};
    char sentence_before[STR_LEN];
    char sentence_after[STR_LEN];
    
    for (i = 0; i < SENT_LEN; ++i)
    {
        strcat(sentence_before, words[i]);
        for (j = 0; j < WORDS_NUM; ++j)
            if (strcmp(words[i], source[j]) == 0)
                strcpy(words[i], target[j]);
        strcat(sentence_after, words[i]);
    }
    
    puts("替换前:");
    puts(sentence_before);
    puts("替换后:");
    puts(sentence_after);

    return 0;
}
 char sentence_before[STR_LEN] = {0};
    char sentence_after[STR_LEN] = {0};

数组要初始化为0,否则没有字符串结束符

将这两个字符串数组初始化下:
char sentence_before[STR_LEN] = {0};
char sentence_after[STR_LEN] = {0};

由于以下两个数组未初始化,即未提供初始值就进行使用,因此会出现未知的字符,图中编译出现引号,出现引号其实只是随机的,不同的编译下可能也会出现其他的字符。
** char sentence_before[STR_LEN];
char sentence_after[STR_LEN];**