|
The return value is supposed to be the original buffer pointer. s is incremented so it ends up pointing past the end of the buffer.
Technically, the first parameter should be a void*.
void* memset1(void* s, char c, size_t n)
{
char* p = (char*) s;
for (size_t i = 0; i < n; i++)
{
p[i] = c;
}
return s;
}
(Funny thing is that in VS 2008, as written it figures out that you're doing a memset, and replaces the contents of memset1 with a call to the CRT's memset.)
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
I am currently writing at some kind of logging class and want to improve the usability by overloading the streaming operator. The idea is that i can use the class LogClass in the following two ways:
LogClass test;
std::string blub("blub");
test << "bla " << blub;
std::cout << test << "bla " << blub;
In both cases the content of the objects which are located on right should be logged inside the test object. In the second case the content should also be forwarded to cout.
I was already able to handle some simple cases like the following:
LogClass test;
std::string blub("blub");
test << "bla ";
std::cout << test << blub;
Therefore i overloaded the operator twice like this:
friend std::ostream& operator<<(std::ostream &os, const LogClass &logClass);
void operator<<(const std::string &os);
But this isn't working for more complex scenarios.
I would be really grateful when anyone could give me a hint how this is done probably.
Regards squall23
|
|
|
|
|
Your best bet would probably be to derive LogClass from std::ostream - that way you can make use of all the operator<< definitions in the std namespace. Look at how std::ostringstream works - it derives from ostream and passes a string buffer (as opposed to the file buffer that std::cout would pass) into the ostream base class when constructed.
To summarise, you'd have something like this:
template<class Elem, class Traits = std::char_traits<Elem> >
class basic_log_buffer : public std::basic_streambuf<Elem, Traits>
{
};
template<class Elem, class Traits = std::char_traits<Elem> >
class basic_log_stream : public std::basic_ostream<Elem, Traits>
{
public:
LogStream() : basic_ostream(&my_buffer), my_buffer(whatever) {}
private:
basic_log_buffer<Elem, Traits> my_buffer;
};
This page[^] has an example of deriving new buffer and stream classes. This link[^], to page 209 of Angelika Krafter and Klaus Kreft's book about C++ streams is also of interest - in fact, their book tells you all you want to know about C++ streams and more besides - it's very good. Unfortunately, the Google Book Search link is to a preview of the book - pages are left out every so often, usually the important ones.
To output your log object, you then just need to provide an implementation of operator<< taking your log class.
Here's an operator<< I just wrote for std::ostringstream:
namespace std
{
ostream& operator<<(ostream& os, ostringstream& oss)
{
os << oss.str();
oss.str("");
return os;
}
}
This will write the ostringstream 's contents to the specified ostream when used like so:
std::ostringstream oss;
oss << "Hello";
std::cout << oss << std::endl;
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Thank you for the good explanation and the links!
I am now pretty sure that i can resolve my issues with the information you provided.
Regards, squall23
|
|
|
|
|
I know the title's inflammatory, but what I'm asking is, are there any tools out there that let me figure out more closely wtf is crashing in a release build, other than
MFC42.DLL exception 0xC00000191
000191: ???
000192: ???
000193: ??? Something like windows message monitor?? It's an MFC app, interfaces with some multithreaded COM dlls.
ty
|
|
|
|
|
If you create a Program DataBase (PDB) file with Debug-information, then you can debug Release builds.
Set the C++/C compiler option "Debug Information Format" to "Program Database" and set the Linker option "Generate Debug Info" to "YES /DEBUG".
If you also want to use watches etc. while debugging the release build, then you can set the C++/C compiler option "Optimisation" to "Disabled".
|
|
|
|
|
How would I mimic a break point, or should I just break it manually & "run to cursor"
|
|
|
|
|
You don't have to 'mimic' a breakpoint when you have enabled debug information in the Release build - just put one in as with a Debug build. The only problem is that as optimisations are turned on, you'll find the following problems:
- Some, or possibly all, local data items won't be accessible - hte compiler may have optimised away all need for them
- Some lines of code won't take a breakpoint. This is because they've been optimised away.
- The assembly language can be more difficult to trace to the source than when optimisations are turned off
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
I am currently writing an application using C++ and MFC. I need to put out about 100 words of text that are instructions to the user. I am doing this by using the method CDC::TextOut in my OnPaint routine. However, something about doing it this way does not seem right to me. I am also concerned that there maybe formatting issues. That is, the text does not look particular nice. I am hoping there is a better way to put this text out. Any ideas?
Thanks
Bob
|
|
|
|
|
BobInNJ wrote: I am doing this by using the method CDC::TextOut in my OnPaint routine.
Does this mean you have an SDI or MDI application? If so, and the view based on CFormView , you could add a static control to the top of it and write the instructions there.
Another option would be a modeless dialog. It could contain the instructions while still allowing you to interact with the parent window.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Thanks for the response. I am not using the document view architecture. Therefore, I conclude that
my application is not SDI or MDI.
Bob
|
|
|
|
|
Ok, you either use a separate, modeless dialog for the instructions, or put a static control on your dialog for them.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
(without much context, I cannot offer more help )
Why not simply creating a dialog (modal or modeless) and display the text in a simple multi-line edit box ?
This signature was proudly tested on animals.
|
|
|
|
|
|
Thanks for all the responses. After looking at the alternatives, I came to the conclusion that just putting out plain text using TextOut was the way to go.
Bob
|
|
|
|
|
HI , every body ,,
I build an application In MFC that Uses highgui in OpenCV to show the picture in new window ,,
BUT .. I want to show the picture in the same window of MFC insted of showing in new window ,,
I search about it , but I can't find the answer ,,
please tell me the answer step by step ,,
regards ,,
|
|
|
|
|
The program is to keep records and perform statistical for a class of students.
the class may have up to 40 students. They have 5 quizzes, and all the students are identified by a 4 digit student number
and the program will print the students scores and calculate and print the statistics for each quiz
Student Quiz 1 Quiz 2 Quiz 3 Quiz 4 Quiz 5
1234 78 83 87 91 86
2134 67 77 84 82 79
3124 77 89 93 87 71
High Score 78 89 93 91 86
Low Score 67 77 84 82 71
Average 73.4 83.0 88.2 86.6 78.6
but this is what i have so far
#include<stdio.h>
#define ROW 4
#define COLS 5
int main(void)
{
// Local Declarations
int table [ROW] [COLS] =
{
{1234,52,7,100,78,34}'
{2134,90,36,90,77,30},
{3124,100,45,20,90,70},
{4532,11,17,81,32,77}
};
int line [ROW * COLS];
// Statments
for (int row = 0; row <ROWS;row++)
for (int column =0; column < cols, column++)
line[row * cols + column] = table [row] [column];
for (int row = 0; row <ROWS * cols; row++)
printf("%02d", line [row]);
return 0;
} // main
When i execute im getting 42 errors
|
|
|
|
|
im stuck i cant seem to complete this
and i cant understan y im gettin 42 errors
|
|
|
|
|
biggiant22000 wrote: When i execute im getting 42 errors
what are the errors ?
{1234,52,7,100,78,34}'
change that ' to a ,
|
|
|
|
|
See here.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Hey folks!
Got 2 minor questions i thought i ask here maybe you know an answer to.
First: do you know about any way to check if a given hotkey is available on the system or not? I'm talking about hotkeys you can register using RegisterHotKey[^]. I know this method will fail if the key specified is already registered by someone but if it is not it WILL register the key, but i would like a way to check if i could register it WITHOUT actually doing it (that would happen later on). I know one way would be to try and register it and if it succeeds unregister it again right away but this solution doesn't sound so nice.
Second: I'd like to have a window staying above all other windows that belong to the same process, so it is kind of an always-on-top window but not a system-wide always-on-top window, i do not want this window to stay above all the other windows on the system that belong to different processes.
Thanks in advance for any suggestions.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
Code-o-mat wrote: do you know about any way to check if a given hotkey is available on the system or not?
From the documentation you linked to:
RegisterHotKey fails if the keystrokes specified for the hot key have already been registered by another hot key.
|
|
|
|
|
Thanks for the answer. As i said, i am aware that RegisterHotKey will fail in case the hotkey is already used BUT at the point i want to check if it is available i do not wish to actually register it.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
Code-o-mat wrote: As i said
Yes you did. My fault, I read your post the first time and missed that part. Unfortunately there might not be another way to do it.
|
|
|
|
|
Oh well, i'll go with what i can get, i was just hoping for a more sophisticated way to do it. Thanks.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|