|
If you didn't specify the path of the DLL anywhere, it should just look in the same directory as the exe. I'll think about this a little bit to see if I can remember anything that may cause this... did you do a clean recompile?
|
|
|
|
|
Hi, Albert,
Thank you very much, I solve this problem.
The problem is in the .def file, it has LIBRARY : SERVER
so if I want to change the library file to SERVER_Debug, I also need to change the library name in .def file. So I thought your idea is good, no matter in debug or release mode, use the same name, just output the files in debug and release to different folder, so we don't need to modify .def file.
Thanks again.
|
|
|
|
|
ah yes! i should've remembered the module definition file.. glad you fixed your bug and shared the solution!
|
|
|
|
|
<br />
BYTE message[5];<br />
message[0] = 15;<br />
message[1] = 33;<br />
message[2] = 2;<br />
message[3] = 23;<br />
message[4] = 33;<br />
.<br />
. <br />
.<br />
.<br />
.<br />
<br />
int messageLengh = 60;<br />
<br />
char szLogBuff [512]={0};<br />
for(int i=0;i<messageLengh;i++)<br />
{<br />
char chz[4]={0};<br />
sprintf(chz,"%d ",i);<br />
strcat(szLogBuff,chz);<br />
}<br />
printf(szLogBuff);<br />
Do you find anything wrong with this code?
Do I need to pad the buffer with a '\0'? or just assigning 0 to the buffer initially is fine?
|
|
|
|
|
Smith# wrote: Do you find anything wrong with this code? Do I need to pad the buffer with a '\0'? or just assigning 0 to the buffer initially is fine?
yes. no. yes.
[MODIFIED]
if it really is the indexes you want to print, then it is: no. no. yes. (but why show all the message stuff then?)
[/MODIFIED]
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
modified on Thursday, March 31, 2011 2:26 PM
|
|
|
|
|
The first yes makes me not to click on the x of this window. Could you please tell me what is wrong with the code before I click on x?
|
|
|
|
|
Smith# wrote: char chz[4]={0};
this buffer is too small, your sprintf statement may generate a minus sign, three digits, a space, and a NULL, that is 6 characters.
60 of these could take up to 301 chars, so char szLogBuff [512]={0}; is sufficiently large, and as others already pointed out, your total initialization is a waste, as each strcat will move the initial terminating NULL backwards.
BTW: you could get the correct result with less code, and save some cycles, and never have the bug you had, by having sprintf() fill the final buffer right away; all it takes is a variable pointer as the destination, initialized to szLogBuff, and incremented by the return value of sprintf!
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
Luc Pattyn wrote: your sprintf statement may generate a minus sign
No, it cannot.
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
[My articles]
|
|
|
|
|
from the code snippet I can't tell what the definition of BYTE is, could be signed, could be unsigned; I prepare for the worst. Anyway, it isn't really relevant, the buffer isn't sufficiently large.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
You didn't read the snippet, did you?
(hint: it sprints the index, the BYTE part is completely insignificant).
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
[My articles]
|
|
|
|
|
How silly.
So that must be wrong too.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
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
[My articles]
|
|
|
|
|
The code (albeit not beautiful) is correct.
With szLogBuf[512]={0}; you actually initialize the whole buffer with 0 (that is '\0').
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
[My articles]
|
|
|
|
|
Then what is the best way to clear the buffer initially?
|
|
|
|
|
Since you are dealing with strings there isn't a need to clear the whole buffer.
char x[100] = { 0 };
internally calls memset. In your case it's a waste of (7 or so not including the loop inside memset) CPU cycles.
char x[100];
x[0] = 0;
initially creates an empty string. Just 1 CPU cycle.
But then, calling functions like strcpy and sprintf don't require the buffer to be empty whereas strcat NEEDS a string (empty or otherwise) to append to.
Waldermort
|
|
|
|
|
whereas strcat NEEDS a string (empty or otherwise) to append to.
so I'll have to memset everything to 0 or initialize everything to 0 right?
|
|
|
|
|
No. When dealing with string buffers you only need to set the first char/wchar/tchar to 0.
char myString[100];
strcat( myString, "Hello World!" );
strcpy( myString, "World!" );
myString[0] = 0;
strcat( myString, "Hello World!" );
The new string is actually 13 chars because there is a 0 at the end.
On another note. You shouldn't be using those string functions. There are safer versions available:
strcpy_s( myString, 100, "Hello World!" );
These check to make sure the buffer is large enough for the string
Also, you might want to read up on TCHAR and the unicode/ansi string functions
TCHAR myString[100];<br />
_tcscpy_s( myString, 100, _T("Hello World!");
Waldermort
|
|
|
|
|
CPallini wrote: The code ... is correct.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
It isn't wrong. It isn't elegant nor optimal, but not wrong. I think this is a great achievement, after all.
(It's a subliminal suggestion for you: could you please hire the OP?)
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
[My articles]
|
|
|
|
|
CPallini wrote: It isn't elegant
true.
CPallini wrote: nor optimal
true.
CPallini wrote: not wrong
false. see my reply to OP.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
See my reply[^].
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
[My articles]
|
|
|
|
|
On most 32 bit systems bit 1 and 2 are not used in an address. This allows the CAS algorithm to test an address and also test a flag (very useful for non blocking linked lists).
However on a 64 bit system those 2 bit are in use.
After doing some googling I have found that AMD64 and IA64 use 48 bits. AMD plans to extend that 52 bits.
So my question is, Am I safe to use bit 1 of a 64 bit address, if so will it be portable?
Waldermort
|
|
|
|
|
What exactly do you want to ask ?
Is it processor architecture ?
Is it C, or C++, or C# ?
Is it Win32 / Win64 ?
Is it about pointers ?
If you (in C/C++/C#) have a BYTE array, then ALL lower bits of an address WILL be used; ohterwise you wouldn't be able to do a bulk read or write from a binary file.
Of course, if you do so, you will earn a lot of additional CPU cycles due to misalignment of addresses to WORD / DWORD boundaries, but as cores are so fast now, it doesn't really matters
|
|
|
|
|
Hi,
I need information on socket programming and need to develop an application which communicates with each other as server socket and client socket..
Can any one help me out regarding this...?
Thanks
John.
|
|
|
|
|
Google[^] is your friend and has a lot of information. And this[^] is a good lecture as well
Regards.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpfull answers is nice, but saying thanks can be even nicer.
|
|
|
|