問題タブ [strtok]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cのstrtok()および読み取り専用文字列リテラル
char * strtok(char * s1、const char * s2)
この関数を繰り返し呼び出すと、文字列s1が「トークン」に分割されます。つまり、文字列はサブ文字列に分割され、それぞれが「\ 0」で終了します。ここで、「\0」は文字列s2に含まれるすべての文字を置き換えます。最初の呼び出しでは、s1としてトークン化される文字列を使用します。以降の呼び出しでは、最初の引数としてNULLが使用されます。現在のトークンの先頭へのポインタが返されます。トークンがなくなると、NULLが返されます。
やあ、
私は今使用しようとしていますが、strtok
に渡すとセグメンテーション違反が発生することがわかりました。を渡すと、正常に動作します。char*
s1
char[]
strtok
どうしてこれなの?
char*
私はグーグルで検索しましたが、その理由は、読み取り専用でchar[]
書き込み可能である方法に関するもののようです。より徹底的な説明をいただければ幸いです。
c++ - strtokとC++の部分文字列を置き換えます
文字列「12233456」がある場合
「\x12\ x23 \ x34 \ x56」に変更する最も簡単な方法は何ですか?
c++ - std::stringでstrtokを使用する
トークン化したい文字列があります。しかし、Cstrtok()
関数では、文字列が。である必要がありchar*
ます。どうすればこれを簡単に行うことができますか?
私は試した:
に変わるので失敗しconst char*
ますchar*
c - strtok の代替手段を開発しました
独自のバージョンの strtok を開発しました。ポインターの使用を練習するだけです。
誰でもこれで制限を見ることができますか、とにかく私は改善できます.
c - strtok と関数呼び出し
私はこの非常に奇妙な振る舞いをしています:
以下のコードでは: MyLogger への呼び出しにコメントを付けると、sTempNr がトークン化され、4 つのトークンが表示されるというすべてが正常に機能します。しかし、ログ記録のために MyLogger への呼び出しのコメントを外すと、反復は 1 回だけ行われ、以下のような同様のコードを持つ他のテスト クラスでは、冗長な情報が MyLogger に送信されて 4 回以上ループが発生します。
そのため、Purify ツールを使用して、MyLogger にメモリの問題があるかどうかを確認しました。見つかりませんでした。MyLogger は vaargs を使用して引数を抽出し、vfprintf を呼び出して印刷します。
このコードをさらにデバッグする方法がわかりません。任意のガイダンスをいただければ幸いです!.
c - C-strtokおよびstrcmp
strtokとstrcmpの使用に少し問題があります。
次のヘッダーを付けると
私はこの出力を取得します:
ご覧のとおり、strtok()は文字列を適切に解析しますが、値c1とc2は意味をなさないようです(c1は0を返す必要がありますが、代わりに1を返します)。
何が起きてる?
c - strtok とメモリ リーク
strtok() を使用して簡単な URL パーサーを作成しました。ここにコードがあります
ご覧のとおり、私は strtok() をよく使うので、URL を「スライス」できます。http や https 以外の URL をサポートする必要はないので、この方法ですべての問題が解決します。私の懸念は(これは組み込みデバイスで実行されています)-メモリを無駄にしていますか?のようなものを書くとき
そして、後で呼び出します
最初に保持されたポインタ ret->protocol はメモリに残りますか? 最初の呼び出しを tmp ポインターに設定し、ret->protocol を文字列の右側の部分に指定して strtok を呼び出し (2 番目の呼び出し)、次に free(tmp) を呼び出す必要があるのではないかと考えました。
strtok を使用する最良の方法は何ですか?
c - Cのネストされたループでstrtok()を使用しますか?
ネストされたループで使用しようとしてstrtok()
いますが、同じメモリ位置を使用している可能性があるため、望ましい結果が得られません。私のコードは次の形式です:-
c++ - C++ 文字列を char* に変換する方法
strtok_s で使用するために文字列を char * に変換する必要があり、それを理解できませんでした。c_str() は、互換性のない const char * に変換されます。
また、2 番目の strtok_s 関数 (ループ内) が必要な理由を誰かが説明できれば、非常に役立ちます。たとえば、ファイルの各行を連続して暗黙的にフェッチする while ループではなく、トークンを明示的に進める必要があるのはなぜですか。
関連する質問。