Fixed String Initializing, Space/Null Bytes, LEN, and RTRIM$ (27631)
This article was previously published under Q27631
SUMMARY
An uninitialized fixed-length string is filled with null bytes. When
you initialize a fixed-length string to be equal to "" (the "null
string"), the string will be filled with blank bytes (spaces). This
behavior of fixed-length strings differs from variable-length strings,
and may affect your program's use of functions such as RTRIM$ in ways
you don't expect (see code examples below).
Note that a null byte has an ASCII value of zero, the same as is
returned by the CHR$(0) function, whereas a blank byte (space) has an
ASCII value of 32, the same as is returned by the CHR$(32) function.
The length shown by the LEN function for a fixed-length string x will
always be the fixed size n determined in the DIM x AS STRING * n
statement.
This information applies to Microsoft QuickBasic versions 4.0, 4.0b,
and 4.5, to Microsoft Basic Compiler versions 6.0 and 6.0b for MS-DOS
and MS OS/2, to Microsoft Basic Professional Development System (PDS)
versions 7.0 and 7.1 for MS-DOS and MS OS/2, and to Microsoft Visual
Basic programming system version 1.0 for Windows.
MORE INFORMATION
Note that fixed-length strings are not supported in QuickBasic
versions 3.0 and earlier.
Note that LEN(RTRIM$(x)) returns the actual length of just the
non-null, nonblank contents of x if x is an INITIALIZED fixed-length
string. (This is because RTRIM$ actually returns a variable-length
string.) If x is an UNINITIALIZED fixed-length string, LEN(RTRIM$(x))
always returns the fixed, dimensioned length, because RTRIM$ is
ignored in this case.
Example 1
The following code example demonstrates the difference between
assigned and unassigned fixed-length strings:
DIM s AS STRING * 10 'initially nulls
PRINT LEN(s),LEN(RTRIM$(s)),ASC(RIGHT$(s,1)) '10,10 and 0 (null)
s = "" 'pad with spaces
PRINT LEN(s),LEN(RTRIM$(s)),ASC(RIGHT$(s,1)) '10,0 and 32 (space)
Example 2
In the following sample program, A is a fixed-length string with a
length of 10 bytes, and B$ is a variable-length string. Both A and B$
are assigned a string of ten blank characters (ASCII value 32).
DIM a AS STRING * 10
B$ = SPACE$(10)
PRINT LEN(RTRIM$(a)) ' Prints 10 since fixed string is uninitialized.
PRINT LEN(RTRIM$(b$)) ' Prints 0 for variable-length string.
a = ""
PRINT LEN(RTRIM$(a)) ' prints 0 as the length of the trimmed string
' returned by RTRIM$ since fixed string is all
' blanks.
Note that the RTRIM$ function returns a variable-length string, even
when a fixed-length string is its argument in parentheses. In the
above program, the LEN function is operating on the variable-length
string returned by the RTRIM$ function.
Example 3
The following code example illustrates one case where the incorrect
assumption that fixed-length strings are automatically initialized to
spaces will cause unexpected results. The INPUT statement will never
get executed, unless the fixed length STRING "s" is initialized to all
blanks:
DIM s AS STRING * 10 'Desired result: wait until something entered.
's = "" 'Uncomment this line for expected results.
WHILE RTRIM$(s) = "" 'Fails first time since RTRIM$(s)=10 nulls.
INPUT "Input data: ",s 'Never executed
WEND
Modification Type: |
Minor |
Last Reviewed: |
1/8/2003 |
Keywords: |
KB27631 |
|