問題タブ [null-terminated]
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 - 関数が文字配列の 1 つだけを破損するのはなぜですか?
やあみんな/女の子!ここでは新しいので、これをフォーマットする方法に問題がある場合は、批判を気にしません.
これは、2 つの文字列が互いのアナグラムであるかどうかをチェックする私のプログラムのスニペットです。大文字と小文字は区別されません。
ただし、配列は、呼び出しの順序やいずれかの配列に割り当てられた文字列に関係なくl_str1
、配列と比較して常に何らかの方法で「破損」してしまいます。l_str2
Lowercase_Strings
たとえば、str1 = "MARY"
andstr2 = "ARMY"
はになりますが、最後に 2 つのランダムな記号l_str2 = "army"
が付きます。l_str1 = "mary"
何が起こっているのか誰かが知っているなら、それはありがたいです。
c - 文字列、ヌル文字、strcmpについて
マイクロコントローラーで C プログラムを作成し、C プログラムの文字列を PC から受信した文字列と比較したい、C# を使用した PC のプログラムで、C# のデフォルトの文字列には null 文字が含まれていません。
それで、私の C プログラムは、PC から受信した文字列に null 文字を自動的に追加しませんか?
また、strcmp 関数は 2 つの文字列を比較できますか?1 つの文字列には null 文字が含まれ、もう 1 つの文字列には null 文字が含まれていませんか?
c - 有効な入力とバッファ オーバーフローのシェルコードをどのように区切る必要がありますか?
私は割り当て用のプログラムを与えられ、その上でバッファ オーバーフローを行うように言われました。私の教授は、私たちが取り組んでいる VM をスタック上でシェルコードを実行するように構成しているので、必要なのはシェルコードの開始をリターン アドレスに配置することだけです。オーバーフローしようとしているバッファはs1[64]
. s1
プログラムで後で使用されるため、有効なファイル名である必要があり、無効なexit(1)
場合はプログラムが実行されます。s1
この形式で入力を入力する
必要があると想定しています: validFileName+fileNameTerminator+Filler+Shellcode
.
S1
を使用してコマンドラインから読み込まれscanf(%s,s1)
ます。私が抱えている問題は、有効なファイル名とフィラーとシェルコードの開始の間に何を配置することを選択しても、プログラムは入力全体がファイル名であると見なし、それを開くことができないということです。短いファイル名と 63 および 64 の長さのファイル名を試してみましたが、すべて同じ結果が得られました。例:バッファ全体を埋めるのに十分な長さであり、その後にnullターミネータが続くため
、値が期待されるように入力s1
を与えるとします。問題は、印刷すると、入力全体が null ターミネータを見ていないかのように印刷され、明らかに指定された範囲の外を見ていることです。その巨大なものは明らかに有効なファイル名ではないため、これによりプログラムが失敗します。/./././././././././././././././././././././././testFile1GCL.txt\0AAAAAAAA\xeb\x18\x5e\x31\xc0\x88\x46\x07\x89\x76\x08\x89\x46\x0c\xb0\x0b\x8d\x1e\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68
s1
/./././././././././././././././././././././././testFile1GCL.txt
s1
ファイル名と残りのペイロードの間に配置するために考えられるほとんどすべてを試しました\\0
\0
0x0
0x90
. 何があっても、プログラムは常にs1
長い入力全体であると考えて失敗します。ターミネーターを認識していなくても、なぜ に割り当てられた 64 文字の外を見ているのs1
でしょうか?
編集:ファイル名と残りのペイロードの間にスペースを入れてみましたが、これによりファイルが終了しなくなりましたが、これは scanf がスペースで停止し、残りのペイロードを読み取っていないためです。
c++ - 新しい動的 char 配列の最後にあるヌル文字
動的 char 配列を作成する場合:
そして、私はそれを文字列で埋めません.ヌル文字\0
はこの配列の最後にありますか?
c - C での文字列のヌル終了
最後にいくつかのスペースがある文字列があります。最初のスペースが発生した位置でこの文字列を終了したいので、後でそれを行うstrncpy()
と、スペースを含まない文字列の部分のみがコピーされます。
これは明らかに私にセゴートを与えるいくつかの試みです。やりたいことをどうやったらできるの?
c - NULL で終了しないファイル内で NULL で終了する文字列を検索する
読み取り用に 2 つのファイルを開くプログラムを作成しています。最初のファイルには、フォームの配列に保存する 20 個の名前が含まれていますNames[0] = John\0
。2 番目のファイルは、20 個の名前のそれぞれが多数出現する大きなテキスト ファイルです。
プログラムで 2 番目のファイル全体をスキャンする必要があり、名前の 1 つが見つかるたびに変数Count
がインクリメントされ、プログラムの完了時に、テキストに表示されるすべての名前の総数が に格納されCount
ます。
名前の出現回数を検索してカウントするループは次のとおりです。
私が何をしても、このループは期待どおりには機能しませんが、何が問題なのかを発見しました (私はそう思います!)。私の問題は、配列内の各名前が NULL で終了することですが、名前がテキスト ファイルに表示される場合、行の最後の単語として発生しない限り、名前は NULL で終了しません。したがって、このwhile
ループは、テキスト ファイル内の名前の出現回数ではなく、名前のいずれかが行末に出現する回数をカウントするだけです。このループを調整して、この問題に対処するにはどうすればよいですか?
事前にアドバイスをいただきありがとうございます。
c - 末尾の改行を印刷せずにprintfを使用して文字列を印刷する方法
を使用していくつかの文字列を印刷しようとしていますprintf()
が、それらはヌル終了末尾に改行があり、それがフォーマットを台無しにします:
文字列に含まれ"The Racing car."
、ファイル名が次のように表示されるとします"RandomText1.txt"
。
ただし、1行だけで印刷したい:
文字列を変更して、ヌル ターミネータ改行ですが、可能であれば、文字列を変更せずにこの出力を実現する方法が欲しいです。
出来ますか?
c++ - 配列を取得するconstexpr関数で、配列がNULLで終了していることを確認するにはどうすればよいですか?
次のコードは、最大 8 文字の長さの文字列の単純なハッシュのようなものを作成するためのものです。
通常の文字列リテラルと constexpr NULL で終わる文字列の場合、実際には正常に機能します。しかし、私がこのようなことをすると:
、出力は string の場合と同じになります"\x1\x2\x3\x4\x5\x6\x7\x8"
。static_assert(array[N-1]==0,"Failed");
の定義にa を追加しようとしましたstring_hash
が、コンパイラはそれarray[N-1]
は定数式ではないと言います。次に、パラメーターを宣言しようとしましたconstexpr
が、コンパイラーはパラメーターを宣言できないと言いましたconstexpr
。
次に、このチェックを行うにはどうすればよいですか?