問題タブ [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 に答える
1928 参照

c - n文字を超える文字をコピーするstrncopy

プログラムのシェルが与えられ、いくつかの関数を入力する必要があります。

自動的に作成され、定義する必要のある関数に渡される2つの構造体があります。

この関数を定義しfoo、そのように作成したとしましょう。

その関数が呼び出されると、出力されddddddddddddddddddddôÑ@<úHn½*Ìå«*¤ú¤F«*ます。私が間違っていない限り、それは20文字しか保持できないのではないでしょうか?私は実際に作成していませんmsg

msg.dataにコピーするとさらに奇妙になりますpkt.payload

message.dataは以前と同じように出力されますが、packet.payloadは出力されeeeeeeeeeeeeeeeeeeee<úeeeeeeeeeeeeeeeeeeee²+!@<úHn½*Ìå«*¤ú¤F«*ます。なぜ20文字以上なのですか?

Cを使うのは初めてなので、これが明らかな場合は許してください。しかし、言語に問題があるため、課題の核心に到達することすらできません。

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

c - strncpy の質問 (C 言語)

strncpy に問題があります。8 文字の文字列を 2 つに分割しようとしています (最初の 6 文字を 1 つの部分文字列に、残りの 2 文字を別の部分文字列に)。特定の問題を説明するために、コードを次のように簡略化しました。

ユーザーは入力を求められます。「12345678」と入力したとします。次に、プログラムの出力は次のとおりです。

私が期待している出力は次のようになります。

strncpy が文字列に数字を追加しているように見える方法がわかりません...明らかに、strncpy を十分に理解していませんが、何が起こっているのか説明してもらえますか?

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

c - strncpyとmemcpyの違いは?

s[7]にアクセスするにはどうすればよいsですか?

strncpyと の間に違いは見られませんでしたmemcpy。output を(like )sとともに出力したい場合、次のコードでどのような変更を加える必要がありますか。s[7]qwertyA

出力:

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

c++ - strncpyドキュメントの質問

http://www.cplusplus.com/reference/clibrary/cstring/strncpy/に関して、次の点についてstrncpy言及しています。

宛先の末尾にヌル文字が暗黙的に追加されることはないため、ソース内のC文字列の長さがnum未満の場合にのみ、宛先はヌル終了されます。

この文はどういう意味ですか?

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

python - ゼロが埋め込まれたバイトを UTF-8 文字列に変換する

C の型フィールドを含むいくつかの構造体をアンパックしています。フィールドには、C コードで処理されるゼロが埋め込まれた UTF-8 文字列が含まれています (この関数の痕跡的な動作に注意してください)。バイトをデコードすると、最後に多くの文字が含まれるユニコード文字列が得られます。's'strncpyNUL

末尾のゼロ バイトは UTF-8 の一部であり、自動的に削除されるという印象を受けました。

ゼロバイトを削除する適切な方法は何ですか?

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

native - ネイティブ プログラムを直接実行すると正常に動作するのに、コンドル経由で送信するとセグ フォールトで失敗するのはなぜですか?

シミュレーションに取り込もうとしているサードパーティのライブラリがあります。静的ライブラリ (.a) と、そのすべてのランタイム依存関係 (共有オブジェクト) があります。ライブラリにリンクされた非常に単純なアプリケーション (C 言語) を作成しました。サードパーティ ライブラリの API の一部である初期化関数を呼び出して終了するだけです。これをコマンドラインから直接実行すると、正常に動作します。実行可能ファイルをコンドル グリッドに送信すると、strncpy (libc.so.6) でセグ フォールトが発生して失敗します。特定のマシンでのみ実行可能ファイルを実行するようにコンドルを強制しました。そのマシンで直接実行すると、問題なく動作します。

私は主に Java プログラマーです... ネイティブ コーディングの経験は限られています。私は、nm、ldd、catchsegv などのツールに精通しており、それらを実行できるようになっています。しかし、どこから問題を探し始めたらよいかわかりません。

ldd を実行中のマシンで直接実行し、condor から送信されたスクリプトを介して実行可能ファイルと共に実行しました。ldd は、どちらの場合も同じファイルを報告します。

直接実行する方法はわかりませんが、コンドルで実行すると失敗します。プログラムを最終的に実行するプロセス、condor_startd は、root として開始し、その有効な uid をサブミッターに変更するプロセスです。もしかしてこれが何か関係あるの?

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

c - 文字列の長さ 76 の問題

私はここで途方に暮れています。しばらくして私のコードを投稿します...「厄介な」コードの一部を抽出するには長すぎます。ここで私の問題を説明します: 文字列 (ファイルまたはディレクトリへのパス) を、文字列とその長さ{ char *path; size_t path_len}である構造体の配列に格納します。を挿入すると 76 になります。配列から抽出すると、文字列の長さが 78 になるか、配列内の単純な文字列でさえ 77 になります。 pathpath_enpath_lenstrncpystrlen

元の文字列の長さが 77 未満の他のすべてのケースは問題なく動作します。

私は困惑しています。

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

c - 私の場合は strncpy または strlcpy

コピーsrc_strdst_arrとその理由

追伸:良い悪いかについて多くのことを読んだ後、私の頭は私のコンピューターのディスクよりも速く回転していstrncpyますstrlcpy

注:strlcpyどこでも利用できるわけではありません。それはここでは問題ではありません。

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

c++ - utf8対応strncpy

私がこの問題に遭遇した最初の人であるとは信じがたいですが、かなりの時間を探して、これに対する解決策を見つけられませんでした。

strncpyを使用したいのですが、UTF8に対応しているため、宛先文字列にutf8文字が部分的に書き込まれません。

そうしないと、ソースが有効であることがわかっていても(ソース文字列が最大長よりも大きい場合)、結果の文字列が有効なUTF8であるかどうかを確認できません。

結果の文字列の検証は機能しますが、これを頻繁に呼び出す場合は、それをチェックするstrncpy関数を使用することをお勧めします。

glibにはありますg_utf8_strncpyが、これは特定の数のUnicode文字をコピーしますが、Imはバイト長によって制限されるコピー関数を探しています。

明確にするために、「utf8対応」とは、宛先バッファーの制限を超えてはならず、utf-8文字の一部のみをコピーしてはならないことを意味します(有効なutf-8入力が与えられた場合、無効なutf-8出力が発生することはありません)。


ノート:

一部の回答では、すべてのバイトがnullであり、ゼロ終了が保証されないことが指摘されていstrncpyます。振り返ってみると、utf8対応を要求する必要がありstrlcpyましたが、当時はこの関数の存在を知りませんでした。

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

c - strncpyは既存の文字列を上書きします

数字をローマ数字に変換する関数を作成しました。変換自体のロジックは正しいことはわかっていますが、strncpyが呼び出されるたびに、以前の「rom」の値が上書きされます。私はそれを続けて呼び出すことさえ試みました、そしてそれは後者だけを返しました。

コードの抜粋は次のとおりです。

callocを使用することも問題の一部かもしれませんが、mallocを使用してみたところ、同じ結果が得られました。