問題タブ [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 投票する
3 に答える
3042 参照

c - strncpy segfault

コードのこのセクションを機能させるのに問題がありました。コピーする文字配列を取得しようとしているので、動的に割り当てて保存するトークンの数を取得して、環境変数を調べることができます。ただし、元の文字列をstrncpyしようとすると、segfaultが発生し続けます。

渡されたstr1文字配列をコピーする方法と関係があることはわかっていますが、gdbからは理解できません。どんな助けでも大歓迎です

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

c - Strncpy() 文字列長出力エラー

strncpy()余分な文字を必要な長さでコピーするのに問題があります。最上位 10 ビットをある文字列から別の文字列にコピーする必要があります (両方ともchar*形式で)。

大きい変数のサイズは直感的には問題ではなく、小さい変数は、必要な値よりも大幅に小さい場合にのみ出力に影響します (これがなぜなのかはわかりません)。

my の n 値がstrncpy()問題の原因かもしれませんが、なぜこのように動作しているのかわかりません。私が間違っていなければ、宛先文字列の長さ n は、末尾の null 文字を考慮して、データよりも 1 長くする必要があります。

私の文字列はこのようにまったく動作していません。に設定nすると11、次の出力が表示されます。

10文字しかコピーせず、最後の文字はnullになると思います。増やしnても同じ結果になります。

n を 10 に減らすと、問題の核心が明らかになります。

なぜこれを行うのかはわかりませんが、 n が減少するにつれて、nがはるかに小さくなるまで (約 8)、これを実行し続けます。

これらは私のコードの関連行です:

この前はそのままでlv1Index、 binAddr は直接 (指定された出力に) 表示されます。

追加された文字は常になので、初期化前@のゴミではないと思います。lv1Index

0 投票する
7 に答える
7437 参照

c++ - strncpy は std::string と同等ですか?

C++ 標準ライブラリにstrncpyとまったく同等のものはありますか? 終端の 0 に到達するまで、文字列をあるバッファから別のバッファにコピーする関数を意味しますか? たとえば、TCP パケットなどの安全でないソースからの文字列を解析する必要がある場合、データを処理しながら長さのチェックを実行できます。

私はすでにこのトピックに関して多くの検索を行い、興味深いトピックもいくつか見つけましたが、それらの人々はすべて std::string::assign に満足していました。これは文字のサイズをパラメーターとしてコピーすることもできます。この関数の私の問題は、終端の null が既にヒットしたかどうかのチェックを実行しないことです。指定されたサイズを真剣に受け止め、memcpyが文字列のバッファにコピーするのと同じようにデータをコピーします。このようにして、対処中にそのようなチェックがあった場合、必要以上に多くのメモリが割り当てられ、コピーされます。 

これが現在この問題を回避する方法ですが、回避したいオーバーヘッドがいくつかあります。

このコードは、PE バイナリ用のパーサーの一部です (正確には、エクスポート テーブルを解析するルーチンのパーサーです)。rva2sraは、相対仮想アドレスを PE セクション相対アドレスに変換します。ExportDirectory_t構造体には、バイナリのエクスポート名への RVA が含まれています。これは、ゼロで終わる文字列である必要がありますしかし、常にそうである必要はありません-誰かがそれを望むなら、私のプログラムをセクションに属さないメモリに実行させ、最終的にクラッシュする最後のゼロを省略することができます(最良の場合...)。

このような関数を自分で実装することは大きな問題ではありませんが、C++ 標準ライブラリに実装されている解決策があれば、それを望んでいます。

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

arrays - 揮発性配列をstrncpyに渡す

私のISRには、USARTから詰め込まれるバッファがあるので、バッファを揮発性として宣言しました。

はい、問題ありません。それが標準的な習慣だと思います。

main()のどこかで、その配列の一部をコピーする必要があります。これは、配列が循環バッファーであり、将来的には消去されるためです。

ああ、でもこれはノーノーです!私のコンパイラは忠実に私に言います:

'strncpy'の引数2を渡すと、ポインタターゲットタイプから'volatile'修飾子が破棄されます

strncpyは「s2」をconstcharにするため*

私は、標準的な慣行として行われていないことをしているとは思いません。これを正しく行うにはどうすればよいですか?

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

c - 異なるサイズの整数からポインターへのキャスト[-Wint-to-pointer-cast]

さて、私は以前ここで答えられた質問を復活させなければなりません。他の理由でいくつか変更を加えましたが、再び問題が発生しました。関連する詳細は次のとおりです。

キャストすると、件名にエラーが表示されます。キャストなしで私は得る:

'memcpy'の引数2を渡すと、キャストなしで整数からポインタが作成されます

代わりにstrncpyを使用した場合も同じことが起こることに注意してください。だから私は困惑しています。memcpyがvoid*を使用していることを理解したと思いました。私は何が間違っているのですか?

0 投票する
5 に答える
10105 参照

c - C文字列のトラバース:文字列の最後の単語を取得します

'\ 0'改行文字から右端のスペースまで、文字列の最後の単語をどのように取得しますか?たとえば、strに文字列を割り当てることができるようなものを作成できます。

どうすれば黄色になりますか?

0 投票する
5 に答える
2855 参照

c - strncpyは面白いキャラクターを紹介します

自分のマシンでコードを実行すると、期待どおりに動作します。

同僚に実行すると、誤動作します。これが起こることです。

次の値の文字列があります:

croc_data_0001.idx

strncpyコピーした文字列の長さが18である文字列に対して、を実行すると、次の値になります。

croc_data_0001.idx♂</p>

私が次のことをすると

コピーされた文字列の値は次のとおりです。

croc_data_0001.idx

この問題の原因は何でしょうか。また、最後の文字をに設定することで問題が解決するのはなぜ\0ですか。

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

c - strcpy() はエラーを作成します

次のコードを使用して初期化しようとしているこの構造があります。「finger_print」を初期化しようとすると実行時エラーが発生します

それの何が問題なのですか?

関数:

strncpy() と同じです

0 投票する
5 に答える
642 参照

c++ - 長さを追加するときのstrncpy char文字列の問題

両方とも同じである 2 つの char 文字列を比較する際に問題が発生しています。

私が使用する場合:

strcpy(string, "StringToCompare");

それ以外の:

strncpy(string, "StringToCompare", 49);

問題は解決しますが、文字列自体を取得するのではなく、文字列の長さを挿入したいと思います。

ここで何がうまくいかないのですか?この問題を解決するにはどうすればよいですか?

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

c++ - ポインタが指すサイズを変更できますか

たとえば、ポインタが「こんにちは、お元気ですか?」という文字の配列を指している場合です。そして、Helloを指すポインタだけが必要です。私はcharポインターを渡しており、それをcoutすると、配列全体が読み取られます。''に当たると中断するforループを使用してサイズを縮小しようとしています。しかし、私はそれを理解する運がありません。何か案は?