問題タブ [strncpy]

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 投票する
2 に答える
5361 参照

c++ - std::string コンテンツをすばやくコピーするには?

関連する質問をいくつか 読みましたが、との速度比較については何もありません。 memcpystrncpy

クリティカル セクション内の文字列コンテンツを追跡するには、何をお勧めしますか?

  • 動的メモリ割り当てを避ける
  • コードの優雅さと読みやすさ/理解のしやすさ (コード行数が少ない)
  • 高速処理(少ない命令、分岐ミス防止)
  • コンパイラーによって最適化できる (または最適化された命令を既に使用している実装がある)

関数について考えていました:

  1. memcpy最小の長さを計算する必要があります ( coliru.stacked-crooked.comのスニペットを参照)

    /li>
  2. strncpyヌル バイトの終端を検索し、不要な最終バイトをすべて埋める (スニペットを参照)

    /li>
  3. snprintf?

  4. std::string::copydypのコメントで示唆されているように...

  5. std::copy同じdypのコメントで再び示唆されているように...

  6. 他のアイデアはありますか?

ベンチマークは実行できますが、複数のコンパイラ/バージョン、異なるフラグ セット、および異なるハードウェア/OS に基づいている必要があります。あなたのフィードバック/背景/専門知識、または数学的な知識に基づいた回答を希望します...

これは一般的な質問であるため、同じ関連する質問を探している人は、私自身の特定の現在のケースではなく、一般的な回答を歓迎します.

参考までに、あるスレッドはファイル内にいくつかの内容を書き込む必要がありstd::string、その内容は別のスレッドによって変更される可能性があります。この別のスレッドを変更できません。この別のスレッドは非常にビジーです。文字列のコピーをロック (ミューテックス/スピンロック) しないと、問題が発生することがあります。std::stringしたがって、これらをすばやくコピーして、ロックセクションの後に書きたいと思います。

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

c - Cで配列のサイズを大きくする奇妙な方法は?

通常、配列のサイズを増やすことはできないと思いました。しかし、次のようにするとどうなりますか:

char arr[4];

strncpy(arr,"12347777",8);

strlen(arr) を呼び出すと長さが増加することがわかります。誰かがそこで何が起こったのか説明できますか?

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

c - strncpy を使用して中断したところから再開する

文字バッファー -char buff[1000]を使用strncpyして、最初の 16 文字を読み取ってリストの一部として保存し、次の 24 文字を読み取ってリストの別の部分として保存しようとしています。ただし、2 回呼び出すとstrncpy、2 回目strncpyは、最初のstrncpy.

これを修正するにはどうすればよいですか? ありがとう!!!

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

c - エラーなしでテキストを確実に char* にコピーする方法

2つの質問があります..

  1. に対して次のコマンドを実行するときに、終了文字を追加する必要がありますchar *stringか?

    strcpy();

    strncpy();

  2. に対して機能するために、上記の操作を行う前にメモリを割り当てる必要がありchar *stringますか?

例えば..

説明してください。

編集: 上記のコードでは、引数を反転させました。ここで質問しているときにタイプミスしただけです。正しい方法は

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

visual-studio-2012 - mingw と Visual Studio 2010 で strncpy の動作が異なる

次のコードを考えてみましょう: mingw 64 で実行し、d->box が "jp2" に等しい場合、br も "jp2" に等しくなります。つまり、null で終了します。したがって、strcmp は成功し、0 を返します。

Visual Studio 2012 では、scrncpy は null で終了する文字列を返しません。

この場合、strcmp は失敗します。しかし、strcmp docs によると:

/////////////////////////////////////////////// /////////////////////

strcmp 2 つの文字列を比較 C 文字列 str1 を C 文字列 str2 と比較します。

この関数は、各文字列の最初の文字の比較を開始します。それらが互いに等しい場合、文字が異なるか、終端のヌル文字に到達するまで、次のペアで続行します。

/////////////////////////////////////////////// ///////////////////////

そのため、1 つの文字列が null で終了し、1 つの文字列がそうでなくても、strcmp は成功するはずです。

これがなぜなのかについてのアイデアはありますか?

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

c - strncpy() ランダムな結果

これは文字列をコピーするはずですが、文字化けした結果を出力します。誰でも私を助けることができますか?

「Hello Hello」を期待していますが、端末は次のように出力します。

GCC は、strncpy の署名にもかかわらず、a と b が互換性のないポインター型を持つという警告を出力します。

2 char ポインターを要求します。https://stackoverflow.com/a/20213168に記載されているように、配列は常に char** であるためですか?

0 投票する
3 に答える
781 参照

c++ - strncpy 関数が正しく機能しない

私はC++で始めたばかりなので、ここでばかげた間違いをしているかもしれません。以下は私のコードとコメントの出力です。私はXcodeを使用しています。

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

c - strncpy によって変更されたプログラムの動作

検討、

このプログラムを実行すると、何も出力されません。しかし、strncpy の呼び出しにコメントすると、"Hello !! 0" と表示されます。

使用された ideone (" http://ideone.com/j1cdKp ")

gcc コンパイラ (Debian 7.4) を使用すると、期待どおりの出力 ("Hello !!hello 6") が得られました。

誰でもこの動作を説明できますか?

-初心者

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

c - strncpy と char **

次のコードは、マッチ 2 の内容をキー [0] にコピーしません。どうしてこんなことに?