問題タブ [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.

0 投票する
7 に答える
55471 参照

c - 最後にガベージ文字を含む string 配列

ユーザーが1つずつ入力する文字を格納するために使用しているchar配列バッファがあります。以下の私のコードは動作しますが、私が理解できないいくつかの不具合があります:

  1. printf を実行して Buffer の内容を確認すると、いっぱいになりますが、最後に文字化けが発生します
  2. char Buffer[8]; として宣言されているにもかかわらず、8 文字で停止しません。

誰かが私に何が起こっているのか、おそらくどうすればこれを修正できるのか説明してもらえますか? ありがとう。

出力:

tagBuffer は 123456789 です!

0 投票する
10 に答える
475 参照

c - このCフラグメントをより安全に書き込むにはどうすればよいでしょうか。

次のCコードフラグメントがあり、エラーを特定して、より安全に記述する方法を提案する必要があります。

したがって、エラーは、strlenが'\0'文字列の末尾を無視するため、コピーに十分なメモリが割り当てられないということですが、より安全に書き込むことで何が得られるのかわかりません。

私は私が想定しているものを使用することができますmalloc(strlen(somestring)+1))が、それよりも良い方法があるに違いないと思いますか?


編集: OK、私は答えを受け入れました、それはANSI Cの一部ではないので、strdupソリューションは私たちから期待されないだろうと思います。それはかなり主観的な質問のようですので、私が何をしたかわかりません受け入れられたのは実際には最高です。とにかくすべての答えをありがとう。

0 投票する
10 に答える
11374 参照

c - null で終わる文字列はなぜですか? または: NULL 終了 vs. 文字 + 長さストレージ

私は C で言語インタープリターを作成しており、私のstring型には次のlengthような属性が含まれています。

このため、C には組み込みのサポートが含まれていないため、この種の文字列を手動で処理するインタープリターで多くの時間を費やさなければなりません。基本的な C に準拠するためだけに、単純な null で終わる文字列に切り替えることを検討しましたが、そうしない理由はたくさんあるようです。

null を探す代わりに「長さ」を使用すると、境界チェックが組み込まれます。

その長さを見つけるには、文字列全体をトラバースする必要があります。

null で終わる文字列の途中で null 文字を処理するには、余分な作業を行う必要があります。

Null で終わる文字列は、Unicode をうまく処理できません。

null で終わらない文字列は、より多くインターンすることができます。つまり、"Hello, world" と "Hello" の文字は、長さが異なるだけで同じ場所に格納できます。これは、null で終わる文字列では実行できません。

文字列スライス (注: 私の言語では文字列は不変です)。明らかに、2 番目の方が遅くなります (そして、よりエラーが発生しやすくなります。両方の関数のbeginとにエラー チェックを追加することを検討してください)。end

結局のところ、ヌル終了文字列を使用する必要があるかどうかについては、もはや考えていません。C がヌル終了文字列を使用する理由について考えています。

だから私の質問は次のとおりです:私が見逃しているヌル終了の利点はありますか?

0 投票する
2 に答える
5027 参照

sql - [My]SQLVARCHARサイズとヌル終了

免責事項:私はSQLとデータベース全般に非常に慣れていません。


最大32文字のテキストデータを格納するフィールドを作成する必要があります。「 」は、データに正確に32文字VARCHAR(32)あることを意味しますか?ヌル終了のために追加の文字を予約する必要がありますか?

簡単なテストを行ったところ、これはWYSIWYGバッファーのようです。しかし、実際に何をしているのかを知っている人から具体的な答えを得たいと思いました。


私はC[++]のバックグラウンドを持っているので、この質問は私の頭の中で警鐘を鳴らしています。

0 投票する
5 に答える
212 参照

c - ACスタイルの文字列ファイル形式の難問

私は私が持っているこの小さな問題と非常に混乱しています。インデックス付けされていないファイル形式のヘッダーがあります。(より具体的にはID3ヘッダー)これで、このヘッダーは、データが実際にはID3タグ(TAG文字列btw)であることを確認するために、文字列または3バイトを格納します。ポイントは、TAGファイル形式のこれがnullで終了しないことです。 。したがって、実行できることが2つあります。

  • ファイル全体をロードし、fread終了していない文字列を比較するには、を使用しますstrncmp。だが:
    1. これはハッキーに聞こえます
    2. 誰かがそれを開いて、これについての事前の知識なしに文字列を操作しようとするとどうなりますか?
  • もう1つのオプションは、ファイルをロードすることですが、C構造体はファイル形式に正確にマップする必要はなく、適切なnullターミネータを含めてから、一意の呼び出しを使用して各メンバーをロードする必要があります。しかし、これもハッキーで退屈な感じがします。

特にそのようなものを扱った実践的な経験を持つ人々からの助けはありがたいです。

0 投票する
4 に答える
5767 参照

java - ゼロで終了する文字列用のJavaBufferedReader

JavaのInputStreamからゼロで終了する文字列を読み取る必要があります。

ゼロで終了する文字列を読み取るためのBufferedReader.readLine()メソッドに似たものはありますか?

0 投票する
7 に答える
1024 参照

c - NULの無効化-GCCでの文字列の終了

GCCでNULで終了する文字列をグローバルに無効にすることは可能ですか?

私は独自の文字列ライブラリを使用していますが、構造体の内部に適切な長さがすでに格納されているため、最後のNUL文字はまったく必要ありません。

ただし、10個の文字列を追加したい場合、これは10バイトがスタックに不必要に割り当てられることを意味します。幅の広い文字列の場合はさらに悪化します。x86の場合、40バイトが無駄になります。x86_64の場合、80バイト!

これらのスタック割り当て文字列を構造体に追加するマクロを定義しました。

使用sizeof(...) - 1は非常にうまく機能しますが、数バイトを節約するためにNUL終了を取り除くことができるかどうか疑問に思っていますか?

0 投票する
7 に答える
102456 参照

c++ - ヌル終了文字列とは何ですか?

std :: stringとどう違うのですか?

0 投票する
9 に答える
8866 参照

c - C の文字列を null で終了する必要があるのはなぜですか?

なぜこれが事実なのか疑問に思うだけです。私は低レベル言語についてもっと知りたいと思っています.Cの基本しか知りません.これはすでに私を混乱させています.

PHP のような言語は、文字列が解釈および/または解析されるときに、文字列を自動的に null で終了しますか?

0 投票する
4 に答える
37855 参照

c# - C#文字列からnullで終了する文字列を取得するにはどうすればよいですか?

  • nullで終了する文字列を必要とするサーバーと通信しています
  • C#でこれをスマートに行うにはどうすればよいですか?