問題タブ [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 - strstr の最初の引数として null 以外で終了するバッファーを渡すとどうなりますか?
私が理解しているように、関数char *strstr(const char *s1, const char *s2);
はヌル終了文字列 s1 でヌル終了文字列 s2 を検索します。
たとえば、null で終了する文字列 s2 を渡しますが、s1 として渡されるバッファーは null で終了しません。このような場合、文字列 s2 が s1 に存在しない場合はどうなりますか? 関数 strstr は、s1 の開始アドレスから '\0' が見つかるまで、s2 を検索し続けます。しかし、まったく見つからないとしましょう'\0'
。保護された、または禁止されたメモリ領域にアクセスしてクラッシュしますか?
これが未定義の動作であることはわかっていますが、あなたの経験に基づいて、何が問題になる可能性がありますか?
c++ - 「代替」文字列ターミネータを定義する方法はありますか (null ターミネータ \0 に加えて)
必ずしもやりたいわけではありませんが、興味があります。C/C++ では、null ターミネーター以外の文字列ターミネーターを定義する方法はありますか? 例えばこんな書き方でいいのかな?
出力を取得し、
?
不可能な場合、メモリを割り当て/コピーせずに、バッファを変更せずに、つまりs をs に上書きせずに、バッファの一部へのポインタを取得する方法はありますか?|
\0
c++ - null で終了する文字列の for ループに基づく範囲
範囲ベースの for ループは C スタイルの文字列をサポートすると想定していました
ただし、これは当てはまりません。標準で[stmt.ranged] (6.5.4)
は、範囲ベースの for は次の 3 つの可能性のいずれかで機能すると述べています。
- 範囲は配列です
begin
範囲は呼び出し可能なend
メソッドを持つクラスです- 関連付けられた名前空間 (および
std
名前空間)に到達可能な ADL があります。
グローバル名前空間に関数を追加するbegin
と、まだエラーが発生します(VS12とGCC 4.7の両方から)。end
const char*
範囲ベースの for ループを C スタイルの文字列で動作させる方法はありますか?
オーバーロードを追加しようとしnamespace std
ましたが、これは機能しましたが、私の理解では、オーバーロードを追加することは違法namespace std
です (これは正しいですか?)
delphi - PChar('') は #0 (nil ではない) へのポインターであることが保証されていますか?
Delphi では、空の文字列 (AnsiString または WideString) を nil ポインタまたは実際の空の文字列へのポインタで表すことができることを理解しています。
実験により、Delphi XE2 (特定のコンパイラ設定) でそれを示しましたPChar('') <> nil
。しかし、これは保証されていますか、それとも将来のバージョンで変更される可能性がありますか、またはコンパイラの設定に依存する可能性がありますか?
私は自信の危機に瀕しています。誰かが私に決定的な答えを与えることができれば、私は感謝します.
c - fprintf 文字列終了時のメンタル ブロック
私はこれで完全に途方に暮れています。これが機能しない理由がわかりません。NULL ターミネータを持つ単純な文字配列 - 出力時に終了しないことを除いて!
これは私の出力です:
これが正しく終了しない理由がわかりません。配列を長くしようとしましたが、毎回同じ結果が得られます。気がおかしくなりそうだ!
誰か見ますか?ありがとう。
c - 「%s」書式指定子が、'\0' を使用せずにすべての要素を一度に出力する文字配列に対しても機能するのはなぜですか?
次のコードを見てください。
name
ERIC全体を出力します。なぜそうなのか?次のよう%s
に文字配列を初期化する場合にのみ機能するはずではありませんname
:
これは明らかにヌル終了文字配列を想定しているため、次のことは考慮していません。
c - 2 つの C スタイル (null で終わる) 文字列を連結するにはどうすればよいですか?
次のように定義された2つの文字列を連結したい:
私は、最初の文字列を実行し、'\0'
記号を見つけて、代わりに 2 番目の文字列を開始する必要があることを理解しています。機能strcat
は同じように機能していますか?
私が使用しているコード:
コンパイル後、次のようなエラーが発生します。
* スタック破壊が検出されました * : ./run が終了しました
私は何を間違っていますか?