Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Beginner
Sep 4, 1998

Sizeof or strlen()?

What's wrong with the following code excerpt?
 
const char name[] = "john doe"; //9 characters, null char implicitly added by compiler
size_t namesz = strlen(name); //namesz equals 8!
Nothing, in fact. Code like this does exist and is perfectly legal. However, it's inefficient and error prone: the standard strlen function computes the length of the string at run time, whereas the string length could have been computed at compile-time using of sizeof operator. Furthermore, there's a potential bug that may result from using strlen: it does not count the terminating null character. In order to get a string size correctly, the value returned from strlen has to be incremented by 1. On the other hand, sizeof returns the correct number of characters in a given string, including the terminating null:
 
size_t namesz = sizeof(name); //namesz now equals 9
However, strlen is sometimes unavoidable. A function taking a char [] argument is implicitly transformed by the compiler into a function taking a char *. Similarly, applying the sizeof operator inside a function to its char [] argument is most likely a bug, since it actually returns the size of a pointer, and not the array size! Therefore, sizeof should be used only in the scope in which the array is declared.
Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date