如何在c++中打印字符数组
how to print char array in c++
如何打印一个字符数组,这样我初始化,然后连接到另一个字符数组?请参阅下面的代码
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()。
相关文章:
- 打印字符数组地址的正确方法
- c ++控制台应用程序,如何在控制台外部打印字符
- 无法使用 swprintf 在 WCHAR* 中打印字符*
- 存储和打印字符,但输出不是预期的
- 如何使 printf 以与 NSLog 相同的方式打印字符缓冲区?
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- C++无法打印字符变量
- 无法打印字符向量C++向量
- 为什么在编辑 fastq 文件并将输出写入新的 fastq 文件时引入不可打印字符?
- C :如何询问文件名并打印字符数组
- 循环中的 Cout 不会按定义的字符逐个打印字符
- (C++) 打印字符数组字符串的单词时出现问题
- 用putchar在屏幕上打印字符
- 在C 中使用继续语句的打印字符
- 在 for 循环 c++ 中打印字符
- 使用while和if递归打印字符
- 打印字符数组 c++
- 如何使用Xcode中的Unicode打印字符╔(和其他字符)
- cout.put() 是否推荐使用 cout<< 打印字符
- C++ 中的密码 |打印字符后删除字符