問題タブ [strerror]
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 - strcpy(strerror(errno),"Hello") が "Hello" をコピーしないのに、{ptr=strerror(errno);strcpy(ptr,"Hello");} がコピーするのはなぜですか?
次のプログラムで何が起こっているのか説明してください。
プログラムの最初と最後に返されたアドレスをチェックアウトし、strerror(errno)
毎回同じアドレスを返すことを確認しました.次に、これを確認したら、最初のケースで、同じアドレスをに割り当ててから、文字列をにptr
コピーしましたII の場合、 から返されたアドレスに直接コピーしようと"Hello"
しました。奇妙な発見がありました。次のことを説明していただければ幸いです。strcpy()
"Hello"
strerror(errno)
にコピー"Hello"
した場合ptr
、後続のように成功し、 がprintf()
出力ptr
されます。しかし、代わりにをHello
渡すと、古いエラー メッセージが出力されます。両方のアドレスが同じですか?両方のアドレスが同じであることを確認しました。コピー先は の戻り値にコピーするのと同じはずです。この不一致を二重に確認するために、に直接コピーしようとしましたが、今回もうまくいきませんそして、同じ古いエラー文字列を出力します.しかし、驚くべきことは、この時点でも、アドレスとstrerror(errno)
ptr
printf()
ptr
strerror(errno)
"Hello"
ptr
strerror(errno)
"Hello"
strerror(errno)
ptr
strerror(errno)
本当にずっと同じです!! どのように可能ですか?それらが同じである場合、どのように異なる文字列を指しているのですか?1つ"Hello"
は古いカスタムエラーメッセージですか?
この背後にある理由を説明してください。
出力
c - strerror() の結果が返されない理由
man ページによると、がstrerror(errnum)
返されますchar *
が、次の警告が表示されます。
で実行するとセグメンテーション違反が発生しますが、で./temp 0
はありません./temp 256
。
誰かがなぜこれが起こるのか、そしてそれを修正する方法を説明できますか (可能であれば)?
temp.c
c - Cでerrnoのシンボリック名を出力するにはどうすればよいですか?
perror()
またはを使用strerror()
して、 に属する「人間が読める」エラー メッセージを出力できますが、 のシンボリック名 (" " など)も出力したいerrno
場合はどうすればよいですか?EAGAIN
errno
それを行うための便利な関数またはマクロはありますか?
更新:以下の受け入れられた回答とそのコメントのアイデアに基づいて、私が書いたコードを添付します:
linux - mkdir で perror のメッセージを理解できない
文字列からディレクトリを作成するコードがあります。cwdはディレクトリ パスを示す文字列です。残念ながら、ディレクトリを作成できないエラーが発生したため、perror()およびstrerror()関数を使用して、エラーのシンボリック名を取得しました。
私の問題は、perror()とstrerror()が「そのようなファイルまたはディレクトリは存在しません」というエラーを出すことです。ここで mkdir のマニュアル ページを調べましたが、前述のエラーは、マニュアル ページに記載されているエラーのリストにはありません。私は何か間違ったことをしていますか?
c - VxWorks での strerror_r のメッセージの最大サイズ
VxWorks は、2 つのパラメーターのみを取るバージョンの strerror_r を提供します。
cURL について言及していますMAXERRSTR_SIZE
。
vxworks スタイルの strerror_r() は、関数に渡すバッファを使用します。バッファー サイズは、少なくとも rtsold.h で定義されている MAXERRSTR_SIZE (150) である必要があります。
しかし、ディストリビューションのどこにもファイル rtsold.h が見つからないようです。
バッファにコピーされるメッセージの最大サイズは? #define または整数定数がどこかに定義されていますか?
c - waitpid の後に strerror(errno) が使用されます。strerror の結果として何が期待されますか?
strerror(errno) で試してみましたが、waitpid の結果文字列を取得しました。
両方の状態でステータス文字列を確認しました:
strerror から以下のプリントを取得しました。
子供が走っている間:
子供の解雇:
waitpid の後の strerror(errno) からの予期される結果文字列は何になるはずです。「子プロセスなし」とはどういう意味ですか?子が正常に終了/終了した場合、それは有効な文字列ですか? 子が実行中/子が終了した場合、waitpidからの戻り値は何を期待する必要がありますか?
ここで私の場合、strerror は次のように返します。
使用したコード:
O/P:
スリープなしの O/P:
c - 現在のロケールで strerror_l を使用するには?
strerror
マルチスレッドに使用される (スレッドセーフではない) Linux コードを修正しています。私はそれを見つけ、strerror_r
両方strerror_l
ともスレッドセーフです。の定義が異なるためstrerror_r
(定義_GNU_SOURCE
が異なる場合)、新しい関数を使用したいのですが、現在のロケールのオブジェクトstrerror_l
を取得するにはどうすればよいですか? locale_t
私はiconv
何も使用しておらず、単純なlibcだけであり、「デフォルトロケール」オブジェクトを取得する方法がわかりません(エラーがどの言語で出力されたかは気にしません。人間が読める文字列が欲しいだけです. )
python - 「str」オブジェクトには属性がありません
Excel で列を開き、そのセルからすべての値をリストに移動しようとしています。
それを実行すると、次のエラーが表示されます。
しかし、私はすでにすべてをインポートしています。
インポートしたものは次のとおりです。
c - Zed Shaw のデバッグ マクロを MSVC に移植する
Zed Shaw のデバッグ マクロは、彼の C の本「Learn C the Hard Way」が無料で読めたときに、彼の Web サイトで見つけました。最初は Linux 用に設計されていましたが、かなりうまく機能し、しばらく使用しています。
現在、Windows 用の C コードを書き始めており、Visual Studio を使用しています。作業中のプロジェクトでこれらのデバッグ マクロを使用したいと考えています。
問題は次のとおりです。 check マクロを使用して、関数がエラーなしで返されることを確認したいとしましょう。
使用されるマクロの定義は次のとおりです。
ただし、私が遭遇した問題は、Visual Studio がstrerror()
非推奨としてマークされ、コンパイルが中止されることでした。プロジェクトでスレッドを使用する予定なので、可能であれば「無視」ルートには行きたくありません。
私がしたclean_errno()
ことは、マクロと同じことを行う関数を作成しましたが、グローバル バッファー変数と呼び出しstrerror_s()
を使用してコピーし、マクロへのポインターを返すことlog_err()
でした。しかし今、私はしなければなりません:
- この1つの3ライナー関数のためだけに、まったく新しいヘッダーとCファイルを作成します。これは豊富だと思います
- または、デバッグ マクロのヘッダーで関数を宣言して実装するだけです。これは、C の良い慣行とはまったく見なされず、非常に醜いものでもあります。
これに対するエレガントでシンプルなソリューションを提供する、私が知らない他のトリック/ハックはありますか?
c - GNU strerror_r バッファーの意味
これらのbuf
/buflen
パラメータは何のためですか?