_CWD$ を置き換えるには、次のようにします。
' Need to use DECLARE LIBRARY for the C function getcwd(string, stringSize).
DECLARE LIBRARY ""
FUNCTION getcwd$ (buffer$, BYVAL buflen)
END DECLARE
' Wrapper function for making usage of getcwd$ more BASIC-like.
DECLARE FUNCTION qb64cwd$ ()
' Print the current working directory.
PRINT qb64cwd$
FUNCTION qb64cwd$ ()
' 32768 characters should be more than large enough on any OS.
REDIM s AS STRING * 32768
qb64cwd$ = getcwd$(s, 32768)
END FUNCTION
ラッパー関数は実際には必要ありませんが、C 関数では、十分な量の書き込み可能なメモリで文字列を渡す必要があります。つまり、getcwd
メモリを割り当てません。十分な量のメモリを渡すことが期待されますが、QB64 の動的サイズのSTRING
型ではそれができないため、ラッパーを使用して十分なサイズの固定長文字列を作成し、それを関数に渡します。ほとんどの場合、wrapper はこれで十分です。これは、OS X および Linux (および QB64 が実行される他のほとんどすべての POSIX ライクなシステム、場合によっては Android を含む) でも動作するはずであることに注意してください。これらのシステムではテストしていませんgetcwd
が、POSIX 関数なので動作するはずです。
その数が十分に大きくない場合はどうなりますか? QB64 では配列をライブラリ関数に渡すことはできず、is でSTRING * variable
ない限り使用できません。つまり、文字列を拡大して再試行することはできません。何か問題が発生したことを伝えるためにエラーが発生した場合は、おそらくエラーを発生させる必要があります (例: )。variable
CONST variable = ...
ERROR 75