no you need to learn how declarations work in c you have specified testbuff as an array of NUMBER pointers to characters that means you have allocated an array big enough to store NUMBER pointers on most machines that s NUMBER bytes per pointer which indeed would give you NUMBER john on fri nov NUMBER NUMBER at NUMBER NUMBER NUMBERpm NUMBER ali saifullah khan wrote here is a test done on the return of sizes by sizeof using pointers include iostream h int main void char testbuff NUMBER int len sizeof testbuff cout len n return NUMBER c debug testbuff NUMBER the output from this is NUMBER but infact it should be returning NUMBER apparently using a pointer has multiplied the value of the original size of the testbuff buffer by the size of the pointer char pointers have a size of NUMBER bytes as is shown when output is NUMBER bytes using int len sizeof char testbuff c debug testbuff NUMBER so sizeof is returning the size of the first entity passed to it that being the size of the pointer whats confusing is when sizeof outputs the value for something like char testbuff here the macro seems to be multiplying the sizes of entities passed to it by considering the first entity as the pointer denoted by the asterisk itself and then taking this value of NUMBER and multiplying it with the size of the buffer testbuff which is NUMBER to produce an output of NUMBER rather strange behaviour original message from cdavison URL to secprog URL cc viega securesoftware com sent tuesday november NUMBER NUMBER NUMBER NUMBER am subject re are bad developer libraries the problem with m software original message from john viega sent NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER pm to cdavison URL cc secprog URL subject re are bad developer libraries the problem with m software strlen does not work because he was trying to get at the allocated size of a buffer not the actual size of the buffer you re right i was looking at the safe_strncpy code and it looks like the author did use strlen sizeof will return the size of the data type passed to it so if you declared mystr as char mystr NUMBER it will return as the original author wanted it will not work with a char so if your strings are dynamically allocated or passed to you as a pointer these macros will not work 