Carlitos Overflow
Carlitos Overflow

Reputation: 673

how to print char array in c++

how can i print a char array such i initialize and then concatenate to another char array? Please see code below

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

this is the output

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

basically i would like to see the output print

source: baby
return value: baby
pointer pass: baby

Upvotes: 7

Views: 42462

Answers (4)

Adna Kateg
Adna Kateg

Reputation: 103

Try this

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

Did using VS 2010 Express. clear memory using memset as soon as you declare dest, it's more secure. Also if you are using VC++, use strcat_s() instead of strcat().

Upvotes: 0

James Kanze
James Kanze

Reputation: 153899

Don't use char[]. If you write:

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

, you'll have no problems. (In fact, your problem is due to the fact that strcat requires a '\0' terminated string as its first argument, and you're giving it random data. Which is undefined behavior.)

Upvotes: 4

xmoex
xmoex

Reputation: 2702

your dest array isn't initialized. so strcat tries to append source to the end of dest wich is determined by a trailing '\0' character, but it's undefined where an uninitialized array might end... (if it does at all...)

so you end up printing more or less random characters until accidentially a '\0' character occurs...

Upvotes: 1

Armen Tsirunyan
Armen Tsirunyan

Reputation: 132974

You haven't initialized dest

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

You were just lucky that it so happened that the 6th (random) value in dest was 0. If it was the 1000th character, your return value would be much longer. If it were greater than 1024 then you'd get undefined behavior.

Strings as char arrays must be delimited with 0. Otherwise there's no telling where they end. You could alternatively say that the string ends at its zeroth character by explicitly setting it to 0;

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

Or you could initialize your whole array with 0's

char dest[1024] = {};

And since your question is tagged C++ I cannot but note that in C++ we use std::strings which save you from a lot of headache. Operator + can be used to concatenate two std::strings

Upvotes: 9

Related Questions