problems with memset

Started by
6 comments, last by Paradigm Shifter 11 years ago

Here's the code:


class gg{
public:
	char ce[10];
	gg(char j = ' ') { memset(ce,j,sizeof(ce));};
};
int main() {
	gg x('m');
	cout << x.ce << endl;

    
}

It outputs all those 10 ms,and then a series of weird symbols appear,why does that happen?

Advertisement

Your string is not null terminated and so the stream is printing whatever follows the last element until the first null character. Add a '\0' at the end to mark the end of the string.

Thank a lot

perhaps the easiest thing to do is:

char ce[10]; // declare string

ce[0]=0; // set string to ""

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

Uh, no. He's about to overwrite the 10 chars in ce with 10 'm' characters so making it the empty string before you do that isn't very useful.

You need to do this

memset(ce, j, sizeof(ce) - 1);

ce[sizeof(ce)-1] = '\0';

You'll want to up the array size to 11 if you want to store 10 'm' characters in the array though as well as the null terminator.

Note: this only works since sizeof char is defined as 1.

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley

Note: this only works since sizeof char is defined as 1.

You can solve this by using sizeof(char):

memset(ce, j, sizeof(ce) - sizeof(char));

However, unless I'm very mistaken, sizeof(char) is guaranteed to be 1.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Note: this only works since sizeof char is defined as 1.

You can solve this by using sizeof(char):


memset(ce, j, sizeof(ce) - sizeof(char));

However, unless I'm very mistaken, sizeof(char) is guaranteed to be 1.

Only if the char array is previously initialized to zero, which I believe is not the case for local variables (their value, and, for pointers, the memory they point to, is undefined).

EDIT: never mind that. And, yes, sizeof(char) is defined to be 1 by the C and C++ standard. Don't have the references with me now, though. Of course it's best to get in the habit of using vectors (and strings) if using C++, there's no overhead and it's just simpler and safer to use, not to mention more idiomatic.

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”

Yeah I know, that's why I said it was DEFINED as 1 ;)

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley

This topic is closed to new replies.

Advertisement