問題タブ [strdup]
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 - const char *とstrdupが、Cでgetoptと一緒に使用されたときに、同じ機能を果たすかどうか。
以下のコードスニペットでは、char*をconstchar *に置き換え、strdup()関数呼び出しを削除して、getopt()によって設定されたoptarg値を直接取得できますか?strdup関数の使用をスキップするには、constchar*を使用することをお勧めします。事前に助けに感謝します。
私はそうする必要性を本当に理解していません。
編集:答えてくれてありがとう。本当に助かりました。コードをconstchar*に変更し、strdup呼び出しをスキップしました。
ありがとう、Liju
c - strdup() - C で何をするのですか?
strdup()
Cの関数の目的は何ですか?
c - strdup() 関数
strdup()
私が OS X でよく使っていた関数が、ANSI C の一部ではなく、POSIX の一部であることに最近気付きました。すべてのコードを書き直したくないので、独自のstrdup()
関数を作成するだけだと思います。それほど難しいことではありませmalloc()
んstrcpy()
。とにかく、私は関数を持っていますが、この関数を書いて自分のコードにリンクし、それが libc に既に存在する場合はどうすればよいでしょうか? リンカまたはコンパイラを使用すると、基本的に独自のバージョンの関数を定義できますか? または別の名前を付ける必要がありますか? 同じ名前を再利用する方法があれば、非常に便利ですstrcpy()
。ユーザーの libc に存在する場合はそれを使用できますが、libc に存在しない場合は、代わりに私のバージョンを使用できます。コードはほとんどありません。可能な限り変更します。
短いバージョン:
a) 組み込み関数と同じ名前で独自の関数を作成するとどうなりますか?
strdup()
b)すべてのコードを not use に書き換えずに、プラットフォームで悪いことが起こらないようにするにはどうすればよいstrdup()
ですか? これは少し面倒です。
c - このCフラグメントをより安全に書き込むにはどうすればよいでしょうか。
次のCコードフラグメントがあり、エラーを特定して、より安全に記述する方法を提案する必要があります。
したがって、エラーは、strlenが'\0'
文字列の末尾を無視するため、コピーに十分なメモリが割り当てられないということですが、より安全に書き込むことで何が得られるのかわかりません。
私は私が想定しているものを使用することができますmalloc(strlen(somestring)+1))
が、それよりも良い方法があるに違いないと思いますか?
編集: OK、私は答えを受け入れました、それはANSI Cの一部ではないので、strdupソリューションは私たちから期待されないだろうと思います。それはかなり主観的な質問のようですので、私が何をしたかわかりません受け入れられたのは実際には最高です。とにかくすべての答えをありがとう。
c - 参照による構造体の受け渡しと操作
これは、構造をいじくり回すために私が思いついたサンプルコードです。setNameで名前を設定する方法とsetLastNameで名前を設定する方法に注意してください。
どちらも機能しますが、2つの方法の違いは何ですか?
片方がもう片方よりも優れていますか?
この例でもstrdupは必要ですか?そうでない場合は、array.nameを文字列リテラルではなくランダムなサイズの変数に設定する必要がありますか?
c - strdup を malloc 予約領域に使用する
malloc を使用して複数の値を格納したことはありませんが、入力ファイルの行を並べ替えるには strdup を使用する必要があり、それを機能させる方法がありません。
strdup()
各行へのポインターを取得するために使用しましたが、後で、 で予約された行数に応じて各行をスペースに入れますmalloc()
。
予約済みメモリがポインターへの配列であったように、それを行う必要があるかどうかはわかりません。つまり、使用してchar**
、後で各 strdup への各ポインターを予約済みスペースに配置することを意味します。
私は次のようなことを考えました:
その後どうすればいいのかわからない、これが正しいかどうかもわからない、その場合、文字列へのポインタをバッファの位置に格納するにはどうすればよいですか?
よろしく
c - メモリリーク解放 g_strdup
g_strdup を解放しようとしていますが、何が間違っているのかわかりません。
を使用しvalgrind --tool=memcheck --leak-check=yes ./a.out
て取得し続けます:
解放するためにさまざまな方法を試しましたが、これまでのところ成功していません。どんな助けにも感謝します。ありがとう
ところで:コンパイルして正常に実行されます。
c++ - strdup の代替
名前を含む本の C++ クラスを書いています。
std::string
この課題での使用は許可されていません。したがって、ここでstrdup
は、コンストラクターでパラメーター名の値を nm にコピーするために使用しています。
を使用せずに同じ結果を達成する代わりに、代わりstrdup
にキーワードを使用する方法はありnew
ますか?
c - このcstrdupコードの何が問題になっていますか?
このコードを考えてみましょう:
これで「string1\nstring2 \ n」を出力したいのですが、str1とstr2はnullのままです。私は何が間違っているのですか?
c - 文字列リテラルでstrdupを使用することの長所と短所
次のコードのすべての長所/短所について明確にしたいと思います。
str1:
- 文字列の内容を変更できます
str2:
- free()を使用する必要はありません
- もっと早く
他に違いはありますか?