問題タブ [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.
c++ - std::string コンテンツをすばやくコピーするには?
関連する質問をいくつか 読みましたが、との速度比較については何もありません。 memcpy
strncpy
クリティカル セクション内の文字列コンテンツを追跡するには、何をお勧めしますか?
- 動的メモリ割り当てを避ける
- コードの優雅さと読みやすさ/理解のしやすさ (コード行数が少ない)
- 高速処理(少ない命令、分岐ミス防止)
- コンパイラーによって最適化できる (または最適化された命令を既に使用している実装がある)
私はc関数について考えていました:
/li>memcpy
最小の長さを計算する必要があります ( coliru.stacked-crooked.comのスニペットを参照)- /li>
std::string::copy
dypのコメントで示唆されているように...他のアイデアはありますか?
ベンチマークは実行できますが、複数のコンパイラ/バージョン、異なるフラグ セット、および異なるハードウェア/OS に基づいている必要があります。あなたのフィードバック/背景/専門知識、または数学的な知識に基づいた回答を希望します...
これは一般的な質問であるため、同じ関連する質問を探している人は、私自身の特定の現在のケースではなく、一般的な回答を歓迎します.
参考までに、あるスレッドはファイル内にいくつかの内容を書き込む必要がありstd::string
、その内容は別のスレッドによって変更される可能性があります。この別のスレッドを変更できません。この別のスレッドは非常にビジーです。文字列のコピーをロック (ミューテックス/スピンロック) しないと、問題が発生することがあります。std::string
したがって、これらをすばやくコピーして、ロックセクションの後に書きたいと思います。
c - Cで配列のサイズを大きくする奇妙な方法は?
通常、配列のサイズを増やすことはできないと思いました。しかし、次のようにするとどうなりますか:
char arr[4];
strncpy(arr,"12347777",8);
strlen(arr) を呼び出すと長さが増加することがわかります。誰かがそこで何が起こったのか説明できますか?
c - strncpy を使用して中断したところから再開する
文字バッファー -char buff[1000]
を使用strncpy
して、最初の 16 文字を読み取ってリストの一部として保存し、次の 24 文字を読み取ってリストの別の部分として保存しようとしています。ただし、2 回呼び出すとstrncpy
、2 回目strncpy
は、最初のstrncpy
.
これを修正するにはどうすればよいですか? ありがとう!!!
c - エラーなしでテキストを確実に char* にコピーする方法
2つの質問があります..
に対して次のコマンドを実行するときに、終了文字を追加する必要があります
char *string
か?strcpy();
strncpy();
に対して機能するために、上記の操作を行う前にメモリを割り当てる必要があり
char *string
ますか?
例えば..
説明してください。
編集: 上記のコードでは、引数を反転させました。ここで質問しているときにタイプミスしただけです。正しい方法は
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 は成功するはずです。
これがなぜなのかについてのアイデアはありますか?
c - strncpy() ランダムな結果
これは文字列をコピーするはずですが、文字化けした結果を出力します。誰でも私を助けることができますか?
「Hello Hello」を期待していますが、端末は次のように出力します。
GCC は、strncpy の署名にもかかわらず、a と b が互換性のないポインター型を持つという警告を出力します。
2 char ポインターを要求します。https://stackoverflow.com/a/20213168に記載されているように、配列は常に char** であるためですか?
c++ - strncpy 関数が正しく機能しない
私はC++で始めたばかりなので、ここでばかげた間違いをしているかもしれません。以下は私のコードとコメントの出力です。私はXcodeを使用しています。
c - strncpy によって変更されたプログラムの動作
検討、
このプログラムを実行すると、何も出力されません。しかし、strncpy の呼び出しにコメントすると、"Hello !! 0" と表示されます。
使用された ideone (" http://ideone.com/j1cdKp ")
gcc コンパイラ (Debian 7.4) を使用すると、期待どおりの出力 ("Hello !!hello 6") が得られました。
誰でもこの動作を説明できますか?
-初心者
c - strncpy と char **
次のコードは、マッチ 2 の内容をキー [0] にコピーしません。どうしてこんなことに?