如何打印一个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
答案 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()。