問題タブ [c-strings]
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++ - 関数から「c_str」を返す
これは私がオンラインで見つけた小さな図書館からのものです:
私のコードでは、これを行っています:
さて、最初d
はゴミが入っていました。std::ostringstream
次に、関数から取得したC文字列は、スタックに割り当てられているため、関数が戻るときに破棄されることに気付きました。だから私は追加しました:
これで、関数から必要なテキストを取得できます。
2つの質問があります:
私はこれを正しく理解していますか?
out
後で、 (タイプのstd::ostringstream
)静的ストレージが割り当てられていることに気付きました。それは、プログラムが終了するまでオブジェクトがメモリにとどまることになっているという意味ではありませんか?もしそうなら、なぜ文字列にアクセスできないのですか?
c++ - std::string に null を埋め込むことはできますか?
通常の C 文字列の場合、ヌル文字'\0'
はデータの終わりを示します。
についてはどうstd::string
ですか。ヌル文字が埋め込まれた文字列を使用できますか?
c++ - CString がヒープまたはスタックにメモリを割り当てているかどうかを確認するにはどうすればよいですか?
MFC CString がヒープまたはスタックにメモリを割り当てているかどうかを確認するにはどうすればよいですか? Windows Mobile/Windows CE プラットフォーム用にコンパイルしています。
私は他の誰かによって開発されたプロジェクトに取り組んでおり、特定の状況下でスタック オーバーフローを目撃しました。スタックに割り当てられたカスタム SQLite レコードセット クラス (多くの CString メンバー変数を持つ) がスタック オーバーフローを引き起こしているかどうかを調べようとしています。
c++ - cタイプの文字列を反転します
これが私のコードです:
だからここにそれが呼ばれるところです:
これが私のエラーです:
/Applications/TextMate.app/Contents/SharedSupport/Bundles/C.tmbundle/Support/bin/bootstrap.sh:7行目:1931バスエラー "$ 3" .out
何かご意見は?前もって感謝します。
c - 時間をCでAC文字列に変換する方法は?
.cファイルの.txtファイルに何かを書きたいのですが、filename_2010_08_19_20_30のように、現在のタイムスタンプを接尾辞としてそのファイルに名前を付ける必要があります。したがって、最初にfilename char配列を定義し、ファイル名を自分で処理する必要がありますか?文字を1つずつ割り当てますか?
それを行う簡単な方法はありますか?
c - コンパイル時に #defined 文字列の長さを決定する
ソケットを介して 0 で終わる文字列を処理するC プログラム(Apache モジュール、つまりプログラムが頻繁に実行される) があるため、その長さを知る必要があります。write()
文字列は次のように#定義されます:
strlen(POLICY)+1
実行時に使用する(したがって、長さを何度も計算する)よりも良い方法はありますか?
POLICY_LENGTH
コンパイル時にすでに設定できるプリプロセッサ ディレクティブはありますか?
c - 構造内の文字列の配列へのアクセス/変更
次のコードがあるとします。
これは明らかに機能しませんが、私がやりたいことを示す必要があります。構造内の文字列の配列の初期化、アクセス、印刷などを行うにはどうすればよいですか?
c - Cでは、char配列宣言で文字列を初期化するのと同じ方法で、ポインタ宣言で文字列を初期化できますか?
これらの2行のコードは同じ結果を達成しますか?関数にこれらの行がある場合、どちらの場合も文字列はスタックに格納されますか?コードの最初の行でnullターミネータを宣言する必要がないことを除けば、一方を他方の上に使用する必要がある強い理由はありますか?
c++ - 文字列削除時のヒープ破損
これが私のコードです:
最初の行は文字列の長さを読み取ります。
2 行目は文字列の長さで新しい char 配列 (c-string) を作成します
。3 行目は文字列を読み取ります (ファイルから読み取ります)
。4 行目は最後に NULL を追加します。
5 行目は、c-string から std::string を作成します。
6 行目は c-string を削除します (HEAP CORRUPTION HAPPENS HERE)
7 行目は文字列を返しますが、エラーのためにこの時点には到達しません。
6 行目にヒープ破損エラーが表示されます。CRT は、アプリケーションがヒープ バッファーの終了後にメモリに書き込みを行ったことを検出しました。
私の質問は明らかかもしれませんが、なぜヒープが破損するのですか? std::string を作成すると、文字列がコピーされ、c-string を安全に削除できるはずです。
現在、std::string を削除した後、c-string が c-string にアクセスしようとしているのではないかと疑っています。
何か案は?
syntax-error - [i] ではなく .at(i) でのコンパイル エラー
その理由は次のとおりです。
char SourceChar = Text.c_str()[Index];
コンパイルしますが、
char SourceChar = Text.c_str().at(Index);
ではない?これに対する回避策はありますか?