|
Your code example may confuse the OP... Your second if() test checks the length of the passed string against the length of the str buffer, instead of "length of the str buffer - 1", so the strcpy(...) executed if the if() passes will overwrite one past the end of the str buffer when it writes a terminating NUL character.
The final else if() test copies the source string correctly, but the line after that places the terminating NUL is using a hardcoded index of 1 , so if str is longer than 2 characters, you will copy a truncated version of the source string and then truncate it further to one character.
Use of sizeof() to determine the character length of the buffer only works for (1) arrays that are part of the object, or automatically/locally allocated as arrays (i.e. if str is actually a pointer to an array and not a real array, it will not work as expected); and (2) only in ANSI builds - for UNICODE, the calculations will be off.
The copying of the source string can be further simplified to:
dwStrBufferLen =
::strncpy( str, Astr, dwStrBufferLen );
str[ dwStrBufferLen - 1 ] = '\0'; This will work regardless of the length of the target string, truncating it if necessary, and will ensure that a terminating NUL is always there.
Since ::strncpy(...) will not go past the length specified, it is one less place to be concerned with doing a correct off-by-one offset. If it runs out of space before the end of the source string, the following line will write the terminating NUL .
Peace!
-=- James Please rate this message - let me know if I helped or not!<hr></hr> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Good catch!
Yes, I missed a few things here. Sorry.
|
|
|
|
|
Maybe because you are running the application in debug mode, and the dll in release mode!?
Either way you are corrupting memory.
AliR.
Visual C++ MVP
|
|
|
|
|
When I add a virtual destructor to this class it is not giving any error.
It runs smoothly.
However if I add simple destructor it fails.
|
|
|
|
|
Hi Guys,
I have finally solved the problem.
If you check the size of class A it comes to be 8 (with virtual destructor) which we were expecting it to be 06 as we have used 2 bytes for ‘stre’ and 4 bytes for virtual pointer
(as we have declared virtual destructor in class A).
On investigation I found that size is 8 due to word alignment of structure and union members which is used to increase the performance.
Due to this we are getting room for extra two characters which accommodates our null character and saves us from crashing.
Thanks for your cooperation.
|
|
|
|
|
I don't understand why you are not increasing the size of the buffer to 3 so that you can have 2 chars and a null, and use strncpy instead of strcpy.
Why are you insisting on overwriting past your buffer?
AliR.
Visual C++ MVP
|
|
|
|
|
I have already implemented this class in my application and changing the string length will require me to make changes to various places which is very error prone at this stage.
|
|
|
|
|
Hi codeprojecters...
i have query abt how to understand polymorphism ..any body plz explain..
Thanks to your Answers....
*****THANKS N ADVANCE****
Mathen.K
(I WILL TRY MY LEVEL BEST )
|
|
|
|
|
I give you a simple example:
Teacher object calls the LearnPolymorphism() method on two instances of Pupil . The first one one, say cleverPupil , that is really an instance of CleverPupil , calls readBook(goodOOPBook) to fulfill task. On the other hand, the second Pupil instance, say lazyPupil , instance of LazyPupil , implements the method in his own way, with a call to startAsking(hereAndThere) ...
Both CleverPupil and LazyPupil inherit from Pupil hence Teacher is able to call virtual Pupil method LearnPolymorphism() on them. But, due to Polymorphism , Teacher obtains two quite distinct results from them.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
modified on Thursday, February 21, 2008 11:06 AM
|
|
|
|
|
clever innovation, 3 stars for u,
I don't think he will understand it, instead completes the homework with these classes example.
|
|
|
|
|
yes u r right mr.rajkumar
*****THANKS N ADVANCE****
Mathen.K
(I WILL TRY MY LEVEL BEST )
|
|
|
|
|
sorry dude,
as Cpallini told, its better to understand from good OOPs book, search the web, if u have doubt, after that post ur queries, lot of gurus are there in CP to help u out.
say i got a article on webcplusplus.com[^]
|
|
|
|
|
rowdy_vc++ wrote: any body plz explain..
See here.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
dear all
howt to convert color image to grayscale image in c++? anyone has such code? thanks a lot
Li Zhiyuan
|
|
|
|
|
There are several articles on codeproject about turning RGB colours into HSL (hue, saturation, luminence) colours - and to get grey scale, you can just extract the luminence component for your needs.
Or search for rgb and grayscale on codeproject for some other mentions of your problem;
http://www.google.com/search?hl=en&q=rgb+grayscale+%2Bsite%3Acodeproject.com&btnG=Search[^]
(Some people may spell it greyscale too.
Good luck,
Iain.
Iain Clarke appearing in spite of being begged not to by CPallini.
|
|
|
|
|
Can't you simply average the color components, i.e.
COLORREF color, gray;
BYTE avg = (GetRValue(color) + GetGValue(color) + GetBValue(color))/3;
gray = RGB(avg, avg, avg);
?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
then (R = 100, G = 0, B = 0) and (R= 0, G =100, B = 0) and (R=0, g= 0, b= 100) all gives the same value, that is if the image has 3 region each filled with Red, Green, Blue respectively, then the whole image has same gray value (can't identify the regions)
modified on Thursday, February 21, 2008 5:06 AM
|
|
|
|
|
Color to Gray space conversion is lossy by definition:
RGB Color space allows 2^24 different values for color image pixels, while the constraint RGB(x,x,x) implies 2^8 different values for gray pixels. Thus we have a mapping of a 2^24 set to 2^8 set, i.e. a lossy mapping.
Average is a very simple method to obtain a grayscale image, maybe also a naive (though working) one, but the lossy nature of the conversion is unavoidable.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
I know that.
but averaging u meantion cannot differentiate even very distinct colours RED, GREEN, BLUE. I personally don't believe that averaging is a solution. eventhough the actual solution is some sort of weighted average
modified on Thursday, February 21, 2008 5:52 AM
|
|
|
|
|
Rajkumar R wrote: but averaging u meantion cannot differentiate even very distinct colours RED, GREEN, BLUE.
The above is obviously true.
Rajkumar R wrote: I personally don't believe averaging is a solution.
You're wrong. It is a quite acceptable solution, because (as I've already written) is a function mapping the color space set to the the grayspace one. It is also a reasonable mapping. Of course there are many possible solutions and the better one maybe application-dependent.
Now a simple question: are you able to distinguish a full red from a full green in a B/W movie? Does it matter to the Director?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
CPallini wrote: distinguish a full red from a full green in a B/W movie? Does it matter to the Director?
lol !!! , instead he can put black screen, save light energy.
|
|
|
|
|
thanks all friends
how to blur or mask a color image, actually i load a jpeg image to computer, now i would like to smooth via Gaussion function, but one of friend said i have to convert color image to grayscale image and then i can blur, so now i don't how to do? anyone has such code or suggestion? thanks a lot
Li Zhiyuan
|
|
|
|
|
|
search for "MakeInactiveDemo" in codeproject he has a function to convert image to grayscale
|
|
|
|
|
thanks friend
anyone know how to convolution of image? i have a little problem of concept, how to multiply two arrays? and how to put new value in new array, thanks a lot, urgent
Li Zhiyuan
|
|
|
|