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

0 投票する
6 に答える
49701 参照

c - C で char ポインターを返す

私はCで書かれたある種のファイル共有プログラムに取り組んでいます。データファイルを読み取ってデータを文字列に保存し、この文字列をメイン関数に返し、メイン関数がクライアントに送り返す関数があります。コードを以下に示します

ただし、この方法は機能しません。何も表示されず、もちろん何も送信されません。しかし、関数 ListFiles() で正しい表示が得られます。何が起こるかわかりません。strcpy() も使用していますが、まだ機能しません。

0 投票する
11 に答える
8945 参照

c - C文字列の「\0」の後のメモリはどうなりますか?

驚くほど単純/愚か/基本的な質問ですが、私にはわかりません。関数の最初で長さがわからないC文字列を関数のユーザーに返したいとします。最初は長さの上限しか設定できず、加工によってはサイズが小さくなる場合があります。

問題は、十分なヒープスペース(上限)を割り当ててから、処理中にそれよりもかなり短い文字列を終了することに何か問題がありますか?つまり、割り当てられたメモリの中央に「\ 0」を貼り付けてfree()も、(a。)は正常に機能し、(b。)「\ 0」の後のスペースは重要ではなくなりますか?'\ 0'が追加されると、メモリは返されるだけですか、free()それとも呼び出されるまでそこにホギングスペースがありますか?mallocを呼び出す前に必要なスペースを計算するための事前のプログラミング時間を節約するために、このハンギングスペースをそこに残すのは一般的に悪いプログラミングスタイルですか?

これにコンテキストを与えるために、次のように、連続する重複を削除したいとします。

「HellooOOOo!!」と入力します ->「HelooOo!」を出力

...そして、以下のコードは、操作の結果として生じるサイズを事前に計算し、ヒープサイズを正しくするために2回処理を効果的に実行する方法を示しています。

0 投票する
1 に答える
1299 参照

c - strcpy が引数を逆順に取るのはなぜですか?

あるオブジェクトを別のオブジェクトにコピーするように設計された他のほとんどすべてのプログラムまたは関数は、基本的な規則を使用します

コピー (ソース、宛先)

一般的な論理でさえ、何かをここからそこにコピーしているという結論に至るでしょう。strcpy が正反対の規則を使用するのはなぜですか? この機能を使おうとする人々を混乱させるだけです。strcpy の作成者は、関数を作成しているときにこのことを考えていたのでしょうか? それとも、strcpy 関数は、この今やユビキタスな使用規則よりも前のものですか?

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

c++ - C++ で C スタイルの文字列を検索して置換する

3 つの C スタイルの文字列を受け取り、C スタイルの文字列を返す関数を作成しようとしています。この関数は、サブストリングのすべての出現について c-string を検索し、それらを別のストリングに置き換えます。
このプログラムは機能しますが、非常に洗練されていないようです。もっとかさばらない方法でできたような気がして仕方がありません。

このコードをより明確かつ/またはより効率的にする方法について誰か提案がありますか? どんなコメントでも大歓迎です。代わりにクラス文字列を使用することを提案しないでください。それはオプションではありません。関数は c-strings で動作する必要があります

0 投票する
12 に答える
58824 参照

c++ - ATL CString から文字配列への変換

CStringを に変換したいchar[]。誰かがこれを行う方法を教えてくれますか?

私のコードは次のようなものです:

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

c++ - C++でのStringStream/c_str()の破損

std :: cout、std :: stringstream、およびstd :: string.c_str()で問題が発生しています。主に、どこかのバッファに引っかかっているものがあるようですが、問題を解決する方法がわかりません。

StackOverflowでコードを読むのが気に入らない場合は、私のgithubへの関連リンクを次に示します。TLStringクラスTestクラス、および単体テストです。最後までスキップして、より簡潔な質問を述べます。

私の単体テストでは、次のコードがあります。

Testクラスのコードは次のとおりです。

TLStringクラスは、私が書いているクラスであり、C ++の文字列にさらに流動的な操作(たとえば、連結)を提供します。これらの操作を処理するために文字列ストリームを使用します。TLStream::c_str()メソッドは実際にはこれを実行しているだけです。return stream.str().c_str();

actualですから、の値がどのように割り当てられているかについて、私は本当に混乱していますtestName。変数に対する変数が相互作用に近づくのは、両方がCLIに出力されるときだけであり、この場合のように、これら2つは異なるデータ型であるため、競合が発生している場所はわかりません。

非常に簡単に言えば、サードパーティのライブラリがC ++文字列ではなくC文字列に依存する時期がわからず、クラスを制限する理由がないため、c_str()関数で記述しました。std :: ios内でも、いくつかの目的でc文字列を使用する必要があります。

どんな助けでも大歓迎です。

ありがとう!

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

c - Cで任意の空白を含むことができる文字列を区切る

文字列の配列があり、各文字列をいくつかの異なる部分に分ける必要があります。文字列には、任意のスペースとタブが含まれる場合と含まれない場合があります。

そのため、先頭/末尾の空白、およびフィールド間にある空白を削除する必要があります (手がかりフィールドを除く。手がかり内のスペースは保持する必要があります)。これを行う方法が本当にわかりません。私にはいくつかの基本的なアイデアがありますが、それらを実装する方法がわかりません。また、実行可能かどうかもわかりません (コーディングが初めてで、まったく無知です)。これまでに試したことはすべて、コンパイルできないか、機能しませんでした。

最初のフィールドを引き出すための私の最近の試み:

うまくいかなかったとしても、それほど驚くことではありません。私はまだこの問題に頭を悩ませていません。助けてください?

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

c# - C# のパスカル文字列

私は C# でオーディオ ライブラリに取り組んでおり、WAVE ファイル形式の ATM に取り組んでいます。私が使用している非常に有益なWeb サイトによると、WAVE は Pascal スタイルの文字列を使用しています。私は 20 分以上グーグルで調べましたが、 C から Pascal へのコンバーターしか思いつきませんでした。

Pascal と C の文字列を比較する方法を知っています (C コード):

それが役立つ場合はSystem.IO.BinaryReader、ファイルの解析に使用しています。

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

c - ファイルから複数の文字列を読み取る

これを理解するのに問題があり、2つの名前を2つのchar[]にfscanfしようとしています。

これはクラッシュして、「waring:warning:互換性のないポインタ型から'fscanf'の引数1を渡す」と表示されます。

編集:MAXは20として定義され、malename1 [MAX + 1] malename2 [MAX + 1](nullを説明するために+1)

編集:私は読み取りをいくらか機能させていますが、malename1の読み取りを終了するためのスペースをどのように説明できますか?私は、malename1についてはChrisで、malename2についてはRyanで読んでいますが、malename1については、ChrisRyanをスキャンします。

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

c++ - よくわかりません!C ++のChar、Char *、またはString

charまたはchar*を使用すると、Visual Studio 2012(11)は次のような最後の文字のみを出力します。

「x」のみを表示します。私が使用しているのは正しいですが string strName = "Alex" 、charとしてパラメータを持つ関数では、文字列を引数として渡すことはできません。この場合、VSコンパイラは文字列をintに変換できないと言っています。また、charとchar*の違いを教えてください。私はPHP開発者であり、C++は非常に混乱しています。私を助けてください。