在C++中使用strcat函数时会出现奇怪的字符

taa*_*eid 1 c++ strcat

我是C++的新手,并从MSDN C++初学者指南中学习.

尝试strcat函数时它可以工作,但我在开始时得到三个奇怪的字符.

这是我的代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main() {
    char first_name[40],last_name[40],full_name[80],space[1];
    space[0] = ' ';
    cout << "Enter your first name: ";
    gets(first_name);
    cout << "Enter your last name: ";
    gets(last_name);
    strcat(full_name,first_name);
    strcat(full_name,space);
    strcat(full_name,last_name);
    cout << "Your name is: " << full_name;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出

Enter your first name: Taher
Enter your last name: Abouzeid
Your name is: Y}@Taher Abouzeid
Run Code Online (Sandbox Code Playgroud)

我想知道为什么Y} @出现在我的名字之前?

小智 8

您没有通过将第一个字符设置为'\ 0'来初始化full_name,因此其中包含垃圾字符,当您执行strcat时,您将在垃圾字符后添加新数据.


Mek*_*boy 5

您正在创建的数组充满了随机数据。C++ 将为数据分配空间,但不会使用已知数据初始化数组。strcat 会将数据附加到字符串的末尾(第一个 '\0'),因为字符数组尚未初始化(并且充满随机数据)这将不是第一个字符。

这可以通过替换来纠正

char first_name[40],last_name[40],full_name[80],space[1];
Run Code Online (Sandbox Code Playgroud)

char first_name[40] = {0};
char last_name[40] = {0};
char full_name[80] = {0};
char space[2] = {0};
Run Code Online (Sandbox Code Playgroud)

= {0}将设置在第一元件到“\ 0”,这是一个字符串结束符号,和C ++将自动所有非指定用“\ 0”元素填充(条件是被指定的至少一种元素)。