問題タブ [strsep]
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 - strsep() のこの segfault がわかりません
本題に入ります。ソケットからコマンド文字列を読み取り、その文字列を構造体に分割する関数があります。
コマンド文字列にオプションがない場合は、Command.option = NULL
. この関数の目的のために、recv() されたデータがソケットの反対側で検証されると想定できます。
これが私が問題を抱えている機能です:
GDB を使用したところ、segfault が発生してcmd = strsep(&running, delimeters);
いることがわかりましたが、その理由はわかりません。GCC は無効なポインターについて警告していないので、それが問題だとは思いません。私も strdup() を使用しているので、リテラルや配列、またはそのようなばかげたことを上書きしても問題はありません。私は正直に困惑しています。
また、実際にスペースが含まれている文字列 (区切り文字) についてのみ文句を言います。単語コマンドは問題なく動作します。問題は、strsep が '\0' でスペースを書き込もうとするときでしょうか? しかし、なぜそれが起こるのでしょうか?
c - strsep() 関数 - 区切り文字の追加文字
C で関数を使用すると問題が発生しstrsep()
ます。文字列を 2 つの部分に分割したいと考えています。文字列には、現在再生中の曲に関する情報がARTIST - TITLE
形式で含まれているため、アーティストとタイトルはスペース 1 つ、ダッシュ 1 つ、スペース 1 つで区切られます。この「-」で区切りたいと思います。一部のアーティストは名前にダッシュが含まれているため、「-」は機能しません。
たとえば、「Michel Telo - Ai Se Eu Te Pego」でこのコードを試すと、次のようになります。
私はこれを得る:
これの代わりに:
デリミタstrsep()
を「 」、「-」、「 」の3文字に分けてORを使っているようですが、そのまま「 - 」を探してほしいです。これを修正する方法はありますか?
c - C - 文字列を分割する strsep
C で simpleShell プログラムの parseCmd メソッドを作成し、区切り文字の空白の前に各引数を格納して、args[] 配列に格納します。ただし、それぞれのパラメーターを含む引数をリンクされたリストに追加しようとしていますが、それらを取得するのに問題があります。
たとえば、次のように入力するls
と、次のようになります。
そして、私がタイプするときls -l
、私は欲しいです;
ここでやろうとしているのは、「-」引数が検出された場合、それを前の引数「ls」に追加し、別の文字列「ls -l」として保存して、linkedList (既に実装されている) に格納することです。
これが私の方法です。
編集:
私は次のことを試しました
しかし、私はセグフォルトを取得しています。
c - char** 配列の C セグメント フォールト
if
プログラムが最初のステートメントに到達したときにセグメンテーション違反が発生する理由がわかりません。
これは、simpleShell プログラムのメソッドであり、格納されている stdin 入力cmd
を解析し、空白で解析して、args
if
ステートメントを印刷することはありません
c - execvp(): そのようなファイルまたはディレクトリはありませんか?
何らかの理由で、execvp()
/bin を含む PATH ファイルにコマンド (ls、pwd など) が見つかりません。私は ls でカスタマイズされたターミナル エイリアスを持っているので、pwd などを使用してテストしていますが (新しい Linux マシンも同様です)、出力用にこれを取得し続けています。
コードは次のとおりです。
編集:私のPATHも含めるとよいと思いました:
c - C - int エラーのある strsep() 関数、戻り値は char*
C コードで strsep() を使用しましたが、このエラーが発生しました。
これは私のコードで、このように strsep() を使用しています。エラーが int と言ったかどうかはわかりません。strsep() return char* だと思います。
c - strsep() を使用したバス エラー
入力としてファイル名 (main.c など) を受け取り、strsep() を使用してファイル拡張子を返す一連の関数を作成しようとしています。プログラムを実行すると、strsep 関数が呼び出されるたびにバス エラーが発生します。コードは次のとおりです。
このプログラムのメイン関数は、ファイル名を含む char* を指定して format() を呼び出すだけです。
このプログラムを実行するとバス エラーが発生する理由がわかりません。あなたが提供できる助けを前もって感謝します。
編集:メイン関数コードを追加
c - c strsep と戻り値: コンパイル中の警告
(c89/90 で) C コードをコンパイルしているときにこの警告が表示され、それを修正する方法がわかりません。誰でも助けることができますか?
edge_target はポインターであり、strsep はポインターを返します。すべて問題ないはずですが、何か不足していますか?
警告: 割り当てにより、キャストなしで整数からポインターが作成されます [デフォルトで有効]