{{fbdoc item="title" value="Operator STRPTR (String pointer)"}}----
Returns the address of a string's character data.

{{fbdoc item="syntax"}}##
	[[KeyPgDeclare|declare]] [[KeyPgOperator|operator]] **Strptr** ( [[KeyPgByref|byref]] //lhs// [[KeyPgAs|as]] [[KeyPgString|string]] ) [[KeyPgAs|as]] [[KeyPgZstring|zstring]] [[KeyPgPtr|ptr]]
	[[KeyPgDeclare|declare]] [[KeyPgOperator|operator]] **Strptr** ( [[KeyPgByref|byref]] //lhs// [[KeyPgAs|as]] [[KeyPgWstring|wstring]] ) [[KeyPgAs|as]] [[KeyPgWstring|wstring]] [[KeyPgPtr|ptr]]
##
{{fbdoc item="usage"}}##
	//result// = **Strptr** ( //lhs// )
##
{{fbdoc item="param"}}
	##//lhs//##
		A string.

{{fbdoc item="ret"}}
	Returns a ##[[KeyPgZstring|Zstring]]/[[KeyPgWstring|wstring]] [[KeyPgPtr|Ptr]]## to a string/wstring's character data (null value in case of empty string).

{{fbdoc item="desc"}}
	This operator returns a ##[[KeyPgZstring|Zstring]]/[[KeyPgWstring|wstring]] [[KeyPgPtr|Ptr]]## that points to the beginning of a string/wstring's character data. ##**Operator Strptr**## is the proper method for acquiring the address of a string's character data.
	In case of empty ##[[KeyPgString|string]]## (only for variable length strings), ##**Operator Strptr**## returns a null pointer.
	
	The related ##[[KeyPgOpVarptr|Operator Varptr (Variable pointer)]]## and ##[[KeyPgOpAt|Operator @ (Address of)]]##, when used with a ##[[KeyPgString|String]]##, return the address of the internal string descriptor.
	When a variable length string is modified, the address of its descriptor remains always the same, but the the string's character data address (returned by ##**Operator Strptr**##) may change (like any allocated memory that must be reallocated).
	When a fixed length string is modified, the string's character data address (returned by ##**Operator Strptr**##) is unchanged.
	
	**Note:** For a variable length string, the operator returns a ##[[KeyPgZstring|Zstring]] [[KeyPgConstQualifier|Const]] [[KeyPgPtr|Ptr]]## (because returning by reference the string's characters pointer set in the string descriptor, this one is to be considered as read only). If the keyword ##[[KeyPgVar|Var]]## is used to declare/initialize a user pointer from ##**Operator Strptr**##, this user pointer is also defined as read only (it can not be modified further).
	
	**Warning:** Since fbc version 1.20.0, dereferencing a zstring pointer to a fixed-length string of STRING*N type (which no longer has an additional terminal null character as before) can lead to an extension of the string by some pollution, or even an outright crash.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/operator/strptr.bas"}}%%(freebasic)
'' This example uses Strptr to demonstrate using pointers with strings
Dim myString As String
Dim toMyStringDesc as any ptr
Dim toMyString As ZString Ptr

'' Note that using standard VARPTR notation will return a pointer to the
'' descriptor, not the string data itself
myString = "Improper method for Strings"
toMyStringDesc = @myString
Print myString
Print hex( toMyStringDesc )
Print

'' However, using Strptr returns the proper pointer
myString = "Hello World Examples Are Silly"
toMyString = StrPtr(myString)
Print myString
Print *toMyString
Print

'' And the pointer acts like pointers to other types
myString = "MyString has now changed"
Print myString
Print *toMyString
Print
%%

{{fbdoc item="diff"}}
	- New to ""FreeBASIC"", but does exactly the same thing as ##[[KeyPgSadd|Sadd]]##

{{fbdoc item="see"}}
	- ##[[KeyPgSadd|Sadd]]##
	- ##[[KeyPgOpVarptr|Varptr]]##
	- ##[[KeyPgOpProcptr|Procptr]]##
	- [[ProPgPointers|Pointers]]

{{fbdoc item="back" value="CatPgOpPoint|Pointer Operators"}}{{fbdoc item="back" value="CatPgOpString|String Operators"}}{{fbdoc item="back" value="CatPgOperators|Operators"}}