如何在c ++中打印char数组

时间:2011-11-22 15:41:24

标签: c++ arrays pointers char

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

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

4 个答案:

答案 0 :(得分:9)

您尚未初始化dest

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

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

作为char数组的字符串必须与0分隔。否则就不知道他们在哪里结束了。或者可以说,字符串通过显式设置为0来结束其第0个字符;

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

或者你可以用0&#39;来初始化整个数组

char dest[1024] = {};

由于你的问题被标记为C++,我不得不注意到在C ++中我们使用std::string来节省你的头痛。 Operator +可用于连接两个std::string s

答案 1 :(得分:4)

请勿使用char[]。如果你写:

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

,你没有问题。 (事实上​​,你的问题是由于这个事实 strcat需要以'\0'终止的字符串作为其第一个参数, 并且你给它随机数据。这是未定义的行为。)

答案 2 :(得分:1)

您的dest数组未初始化。因此strcat尝试将source附加到dest的末尾,由'\0'字符确定,但未初始化的数组可能会以未定义的方式结束...(如果它完全没有...)

所以你最终会打印或多或少的随机字符,直到意外发生'\0'字符...

答案 3 :(得分:0)

试试这个

#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;
}

使用VS 2010 Express。 在声明dest后立即使用memset清除内存,它更安全。此外,如果您使用的是VC ++,请使用strcat_s()而不是strcat()。

相关问题