如何在c++中打印字符数组

how to print char array in c++

本文关键字:打印 字符 数组 c++      更新时间:2023-10-16

如何打印一个字符数组,这样我初始化,然后连接到另一个字符数组?请参阅下面的代码

int main () {
char dest[1020];
char source[7]="baby";
cout <<"source: " <<source <<endl;
cout <<"return value: "<<strcat(dest, source) <<endl;
cout << "pointer pass: "<<dest <<endl;
return 0;
}

这是输出

source: baby
return value: v����baby
pointer pass: v����baby

基本上我想看到输出打印

source: baby
return value: baby
pointer pass: baby

未初始化dest

char dest[1020] = ""; //should fix it

你很幸运,碰巧dest中的第6个(随机)值是0。如果是第1000个字符,则返回值将长得多。如果它大于1024,你就会得到未定义的行为。

字符串作为char数组必须用0分隔。否则就不知道他们会在哪里结束。您也可以通过显式地将字符串设置为0来表示该字符串在第0个字符处结束;

char dest[1020];
dest[0] = 0;

或者你可以用0初始化整个数组

char dest[1024] = {};

既然你的问题被标记为C++,我不得不注意到,在c++中,我们使用std::string s,这使你省去了很多麻烦。操作符+可用于连接两个std::string

不要使用char[]。如果你写:

std::string dest;
std::string source( "baby" )
//  ...
dest += source;

,你不会有问题的。)事实上,你的问题是由事实引起的strcat需要一个以''结尾的字符串作为第一个参数,你给它的是随机数据。

您的dest数组未初始化。所以strcat试图将source追加到dest的末尾,这是由一个末尾的''字符确定的,但它是未定义的,一个未初始化的数组可能结束…(如果有的话…)

所以你最终打印或多或少的随机字符,直到意外出现''字符…

试试这个

#include <iostream>
using namespace std;
int main()
{
    char dest[1020];
    memset (dest, 0, sizeof(dest));
    char source[7] = "baby";
    cout << "Source: " << source << endl;
    cout << "return value: " << strcat_s(dest, source) << endl;
    cout << "pointer pass: " << dest << endl;
    getchar();
    return 0;
}

使用vs2010 Express完成。声明dest后立即使用memset清除内存,这样更安全。另外,如果你正在使用vc++,使用strcat_s()代替strcat()。