Thread: strlen inconsistency

  1. #1
    Registered User
    Join Date
    Aug 2011
    Posts
    24

    strlen inconsistency

    Code:
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    	char *num = "73167176531330624919225119674426574742355349194934\
    		96983520312774506326239578318016984801869478851843\
    		85861560789112949495459501737958331952853208805511\
    		12540698747158523863050715693290963295227443043557\
    		66896648950445244523161731856403098711121722383113\
    		62229893423380308135336276614282806444486645238749\
    		30358907296290491560440772390713810515859307960866\
    		70172427121883998797908792274921901699720888093776\
    		65727333001053367881220235421809751254540594752243\
    		52584907711670556013604839586446706324415722155397\
    		53697817977846174064955149290862569321978468622482\
    		83972241375657056057490261407972968652414535100474\
    		82166370484403199890008895243450658541227588666881\
    		16427171479924442928230863465674813919123162824586\
    		17866458359124566529476545682848912883142607690042\
    		24219022671055626321111109370544217506941658960408\
    		07198403850962455444362981230987879927244284909188\
    		84580156166097919133875499200524063689912560717606\
    		05886116467109405077541002256983155200055935729725\
    		71636269561882670428252483600823257530420752963450";
    	
    	printf("%i\n", strlen(num));
    	
    
    
    	return 0;
    }
    The output of this program is 1,038, which I don't understand considering the number is 1,000 digits long. Where did these extras come from?

  2. #2
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,660
    All the white space at the start of each continued line.

    If you want to fold long lines, then do it like this.
    Code:
    char *folded = "this is "
                   "a folded line";
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  3. #3
    Registered User
    Join Date
    Aug 2010
    Posts
    231
    ANSI C specifies max. 509 chars in one string literal. Use the solution above and split your chars in more than one literals.

  4. #4
    Banned
    Join Date
    Aug 2010
    Location
    Ontario Canada
    Posts
    9,547
    Quote Originally Posted by BillyTKid View Post
    ANSI C specifies max. 509 chars in one string literal. Use the solution above and split your chars in more than one literals.
    Yet, oddly enough he does have 1038 characters in a string literal...

    It's the leading spaces that are tripping him up.

  5. #5
    Registered User
    Join Date
    May 2010
    Posts
    4,633
    The latest C standard specifies:
    5.2.4.1 Translation limits
    The implementation shall be able to translate and execute at least one program that
    contains at least one instance of every one of the following limits:14)
    — 4095 characters in a logical source line
    — 4095 characters in a character string literal or wide string literal (after concatenation)
    Jim

  6. #6
    Registered User
    Join Date
    Aug 2011
    Posts
    24
    Thanks Salem, that sorted it.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. program inconsistency
    By bchan90 in forum C Programming
    Replies: 4
    Last Post: 12-09-2008, 02:57 PM
  2. Inconsistency detected
    By fidodidohk in forum C++ Programming
    Replies: 5
    Last Post: 04-05-2007, 05:12 AM
  3. FindWindow inconsistency
    By CondorMan in forum C++ Programming
    Replies: 7
    Last Post: 06-22-2006, 04:35 AM
  4. Strlen(...)
    By Korhedron in forum C++ Programming
    Replies: 6
    Last Post: 06-10-2003, 03:02 PM
  5. strlen...int?
    By Extol in forum C++ Programming
    Replies: 9
    Last Post: 04-17-2003, 04:35 PM

Tags for this Thread