#strict
#prompt
Declare Function strstr CDECL Lib "crtdll" (s1 As *Byte,s2 As *Byte) As *Byte
Dim a As *Byte,b As *Byte
a="12345678"
b=strstr(a,"456")
Print b As DWord-a As DWord
このコードで、とんでもない値がPrintされてしまいます。
strstr関数の戻り値(変数b)は ポインタ or NULL となるはず(ここではポインタが返ることを期待したコード)なのですが、なぜか1が返ってきています。さらに、*ByteからLongに強制変換されているという警告も出ました。
CDECLだからかな、と思ったのですが
#strict
#prompt
Declare Function strtok CDECL Lib "crtdll" (s1 As *Byte,s2 As *Byte) As *Byte
Dim a As *Byte,b As *Byte
a="123 45678 90123"
b=strtok(a," ")
While b<>NULL
Print MakeStr(b)
b=strtok(NULL," ")
Wend
こちらはなぜか問題ありません。
同じようにポインタを返すCDECL関数なのに、strstrだけおかしいのはなぜでしょう…?
Ver 4.13.00では問題なく動作していたので不具合でしょうか?
#strict
#prompt
Declare Function strstr CDECL Lib "crtdll" (s1 As *Byte,s2 As *Byte) As *Byte
Dim a As *Byte, b As *Byte
a="12345678"
b=strstr(a, "d")
If b = NULL Then
Print "NULL"
EndIf
#strict
#prompt
Declare Function _mbsstr CDECL Lib "crtdll" (s1 As *Byte,s2 As *Byte) As *Byte
Dim a As *Byte, b As *Byte
a="12345678"
b=_mbsstr(a, "456")
If b = NULL Then
Print "NULL"
Else
Print MakeStr(b)
EndIf