0

sscanf が渡された文字列を変更するかどうかを知ることはできますか? または、 sscanf のソースコードを見つけることができる場所を教えてください。

glibc をダウンロードしたところ、次のものが見つかりました。

extern int sscanf (__const char *__restrict __s,
               __const char *__restrict __format, ...) __THROW;
extern int sscanf (__const char *__restrict __s,
               __const char *__restrict __format, ...) __THROW;
4

2 に答える 2

4

sscanf渡した文字列を変更することはありません。const予選でわかります。

Glibc のソース コードはsscanfGitweb にあります

于 2012-04-13T09:57:19.947 に答える
2

優れた C リソースがいくつかあります。についてglibcは、GNU C ライブラリ リファレンス マニュアルがバイブルになるはずです。また、一般的に、特定のコマンドのドキュメントを見つけるには、「man コマンド」をグーグルで検索すると、探しているものがすぐに見つかります。

より具体的にsscanf()は、GNU C Library Manuals には、明示的に次のように記載されています。

重複するオブジェクト間でコピーが行われる場合、この関数の動作は未定義です。たとえば、'%s'、'%S'、または '%[ ' 変換。

したがって、通常は何もしませんが、読み取っている文字列と代入している変数の間で自己参照を行うと、未定義の動作が発生します。

于 2012-04-13T10:08:33.970 に答える