問題タブ [null-character]
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 - 「%s」書式指定子が、'\0' を使用せずにすべての要素を一度に出力する文字配列に対しても機能するのはなぜですか?
次のコードを見てください。
name
ERIC全体を出力します。なぜそうなのか?次のよう%s
に文字配列を初期化する場合にのみ機能するはずではありませんname
:
これは明らかにヌル終了文字配列を想定しているため、次のことは考慮していません。
c++ - 非ヌル終了の C 文字列定数を C++ に格納する
誰かが言う前に、「これは本当に悪いのでやらないでください」.
- NUL で終了する文字列を持つ理由を理解しています。
- 私は次のようなことを述べることができることを知っています ただし、c-string 表現の利便性は大きすぎます。
これの合理的な理由は、私がマイクロコントローラー用にプログラミングしていて、プログラムのメモリにデータを保存する必要があるからです。一部のデータは、バイト、ワード、dword、および float の形式です。NUL のない文字列を連続してデータに含めたいと思います。
<size_t N, char* A>と<size_t N, char (&A)[N]>をパラメーターとして取り、配列をトラバースしてその内容を静的配列に格納するテンプレートを試しましたが、できませんそれを正しくするようです。私は標準が実際にこれを禁止するかもしれないと思います。
文字列をboost::mpl::vector_c<char, ...>テンプレートのようなものとして再マップできれば、それを適切に格納する他のコードがあるため、テンプレート内から配列を逆参照してconst テンプレート パラメータとして使用することも許可されていないようです。
何か案は?
編集:
疑似コードの例 (実際のコードははるかに大きいため、これはちょっと不自然です。また、このようにバイトごとに読み取ることも、リテラルを使用して文字列の最後まで反復することもありません。それは、データもどこかに。):
また、私は C++11 を使用していないことに注意してください。これは C++0x であり、おそらく拡張機能です。
c++ - 文字列内のヌル文字
C++文字列リテラルエスケープ文字のルールから、エリの答え
このバージョンのコンストラクターは char 配列を取るため、機能します。"0\0" "0" を const char* として渡そうとすると、それは C 文字列として扱われ、ヌル文字まですべてがコピーされます。
これは、文字列全体にスペースが割り当てられていないことを意味しますか?つまり、\0 の後の文字列は割り当てられていないスペースに書き込まれますか?
さらに、上記の質問は c++ 文字列に関するものですが、c 文字列についても同じ動作を観察しました。宣言中に文字列の途中に null char を追加すると、c と c++ の文字列は同じですか?
java - 初期化によってプログラムで問題が発生することなく、Javaで文字列を初期化する方法は?
最近、Java で文字列を中置から後置に変換するプログラムを作成しました。そのために、2 つの文字列's'
と を使用し'p'
ました。で両方の文字列を初期化しまし'NULL'
た。次に、 Scanner クラスを使用してユーザーから s の値を取得しました。
したがって、ユーザーが を入力する"a+b"
と、s の値は になります"a+b"
。'NULL'
文字列の一部ではないことに注意してください。
次に、連結演算子 '+' を使用して p を次のように操作します。
私は後置文字列を取得します:すなわち
問題は、今度は NULL が消えないことです! p の値は次のとおりです。
"nullab+"
の代わりに"ab+"
。
これで、連結演算子が問題を引き起こしていることがわかりました。文字列に追加します!
しかし、java [eclipse indigo] では、最初に初期化せずに演算子を使用することはできません! 私は何をしますか?助けてください!
ありがとうございました
アヌジ・カルラ
javascript - javascriptのヌル文字 - Mongo
MongoDB に保存されているデータを処理しようとしています。これらは、バイト文字列にパックされた整数です。フォームの何か:
この文字列を取得してその長さを計算すると、mongo の js エンジンは 7 ではなく 0 を返します。タッチ データに異なる値を設定してこれを確認し、その長さを計算しました。
こんにちは => 5 彼\0llo => 2
「完全な」文字列を読み取る方法についてのアイデアはありますか?
java - Java BufferedWriter でヌル文字を作成する
Java の BufferedWriter を使用してファイルに書き込み、入力を解析してきました。ただし、後でファイルを開くと、ヌル文字が追加されているようです。エンコーディングを「US-ASCII」と「UTF8」に指定しようとしましたが、同じ結果が得られました。ここに私のコードスニペットがあります:
たぶん問題は BufferedWriter にもありませんか?
このコード ブロックに絞り込んだのは、コメント アウトした場合、出力ファイルに null 文字が含まれないためです。VIM で正規表現置換を行うと、ファイルにヌル文字がなくなります (:%s/.*^L//g)。
さらに情報が必要な場合はお知らせください。
ありがとう!
編集: 通常の行の hexdump は次のようになります: 0000000 5349 2a41 3030 202a
しかし、このコードを実行すると、hexdump は次のようになります: 0000000 5330 2a49 4130 202a
なぜ物事が混同されているのかわかりません。
編集: また、ファイルが正規表現と一致せず、そのコードブロックを実行しても、null 文字が表示されます。
編集: これは、差分の最初の数行の 16 進ダンプです: http://pastie.org/pastes/8964701/text
コマンドは次のとおりです: diff -y testfile.hexdump expectedoutput.hexdump
残りの行は、最後の 2 つのように異なります。
clr - SQL CLR ユーザー定義関数 (C#) は、返される文字列内のすべての既存の文字の間に null 文字 (\0) を追加します
これは、私を数日間困惑させ続けています。CLRとUDFに手を出すのは初めてです...
複数行の文字列を入力として受け取り、それをスキャンして、文字列内の特定の行が見つかった場合は別の行に置き換えるユーザー定義関数を作成しました。見つからない場合は、目的の行を末尾に追加するだけです。(コードを参照)
問題は、最終的な String (または Stringbuilder) が SqlString または SqlChars に変換されるときに発生するようです。変換されて返される文字列には、常に 1 文字おきに Nul 文字が含まれます (コンソール出力を介して表示すると、スペースとして表示されます)。
UDF や CLR の基本的なものが欠けている可能性があります。
助けてください!!
コード(最初の試みであるコメント付きのStringbuilderを残します...問題を見つけるための必死の試みで通常の文字列に変更しました):