質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

3667閲覧

C言語 strdup関数の使い方を教えてください。

miun

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/05/30 12:51

編集2021/05/30 12:56

c言語のstrdup関数でコピーした内容で条件分岐するとうまく行きません。

 下記プログラムでは、文字ポインターaとbを用意し、aの中に"copy"という文字列を入れています。
strdup関数でaの内容をbにコピーし、bの内容と"copy"が同じならば"bの中身とaは同じです。"と出力するようにしています。

 しかし、結果は「bとaは違います。」と出力されます。
どうしたら、この条件式で真になるのでしょうか?

 Visual Studio 2019でデバックしています。イメージ説明

追記:プログラムのコードを張ります。

C言語

1#include<stdio.h> 2#include<string.h> 3int main(void) { 4 char* a = "copy"; 5 char* b; 6 7 //aの文字列をbにコピーする 8 b = _strdup(a); 9 10 //条件:bの内容がaと同じ時 11 if (*b == "copy") { 12 printf("bの中身はaと同じです。\n"); 13 } 14 else { 15 printf("bとaは違います。\n"); 16 } 17 18 return 0; 19}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/05/30 12:54

コードは画像ではなくテキストで提示しましょう
dodox86

2021/05/30 23:36

いただいている各回答へのコメントを読んで: 解決したのであれば質問者さんの疑問の解決に直接役に立ったいずれかの回答にBA(ベストアンサー)を差し上げ、質問を閉じましょう。 尚、「strdup (_strdup) の使い方」で言うと、strdup()で確保した文字列のメモリーは実はmalloc関数で確保されるものなので、使った後はfree関数で解放するのがお約束です。リファレンスを見ても明示的に書かれていないので分かりづらいですが。 _strdup() https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strdup-wcsdup-mbsdup?view=msvc-160 strdup() https://linuxjm.osdn.jp/html/LDP_man-pages/man3/strdup.3.html
guest

回答3

0

下の方、見ると、warning C4047: "==": ... と言う警告が見えますが、確認してますか?
左が文字で、右が文字列となります。 (一般的には等号は成立しません)

比較するならば、 strcmp() 等を使うべきでしょう。

投稿2021/05/30 12:59

pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miun

2021/05/30 13:23

下の方を見ていませんでした!そこにエラーが出る事もあったんですね!以後気を付けます
miun

2021/05/30 13:24

ありがとうございます 解決しました!
guest

0

文字列の比較には == ではなく strcmp() を使ってください。

c

1if (strcmp(b, "copy") == 0) {

投稿2021/05/30 12:56

int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miun

2021/05/30 13:24

ありがとうございます おかげで出来ました!
guest

0

C言語では、文字列の==での比較はできません

投稿2021/05/30 12:55

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miun

2021/05/30 13:24

ありがとうございます だから調べてもなかなか出てこなかったんですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問