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

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

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

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

Q&A

解決済

2回答

1480閲覧

C言語でbsearchを使いたいのですが、ポインタのエラーが出ます。

nokonoko

総合スコア7

C

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

0グッド

0クリップ

投稿2018/06/14 09:17

前提・実現したいこと

C言語でbsearchを使い、ある配列の中に特定の値が格納されているのかどうかを判別したいのですが、以下のようなエラーメッセージが出ます。おそらくはポインタの指定が正しくないからだと推測できますが、どのように直せばよいのかが分かりません。どなたか教えてもらえないでしょうか?よろしくお願いします。

発生している問題・エラーメッセージ

mineud.c:43: 警告: assignment makes integer from pointer without a cast

該当のソースコード

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4 5double x[1400],y[1400]; 6int eud2d(int i, int j); 7 8int comp(const void *c1, const void *c2); 9 10int main(){ 11 int a,a1,b,b1,k,l,m,n,p,dis,result; 12 int z[1400]; 13 char buf[256]; 14 15 for(l=0;l<1400;l++){ 16 fgets(buf,256,stdin); 17 sscanf(buf,"%d %lf %lf",&a,&x[l],&y[l]); 18 } 19 20 n = 0; 21 p = 0; 22 z[p] = n; 23 p++; 24 result = 0; 25 26 for(m=0;m<1400;m++){ 27 dis = 9999; 28 for(k=0;k<1400;k++){ 29 if(n==k) continue; 30 if(result==0){ 31 if(dis>eud2d(n,k)){ 32 a1 = n; 33 b1 = k; 34 dis = eud2d(n,k); 35 } 36 } 37 else continue; 38 } 39 printf("a=%d b=%d dis=%d\n",a1,b1,dis); 40 n = b1; 41 z[p] = n; 42 qsort(z,p,sizeof(int),comp); 43 result = (int *)bsearch(&k,z,p,sizeof(int),comp); /* ここが問題の箇所です。*/ 44 p++; 45 } 46 47 return 0; 48} 49 50int eud2d(int i, int j){ 51 52 double xd,yd; 53 54 xd = x[i]-x[j]; 55 yd = y[i]-y[j]; 56 57 return (int) (sqrt(xd*xd+yd*yd) +0.5); 58} 59 60int comp(const void *c1,const void *c2){ 61 62 int tmp1 = *(int*)c1; 63 int tmp2 = *(int*)c2; 64 65 if(tmp1 < tmp2) return -1; 66 if(tmp1 == tmp2) return 0; 67 if(tmp1 > tmp2) return 1; 68} 69

補足情報(FW/ツールのバージョンなど)

Linuxを使っています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ポインタをint型の変数に入れているので、警告が出ています。
bsearchの戻り値はvoid*ですが、既にint*にキャストはできていますので、resultint*で宣言してあげればよいでしょう。

c

1int a,a1,b,b1,k,l,m,n,p,dis,result; 23int a,a1,b,b1,k,l,m,n,p,dis,*result;

その他の動作については確認していませんのであしからず。

投稿2018/06/14 09:33

ttyp03

総合スコア16996

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

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

0

それはエラーメッセージではなくて警告です
コンパイルは正常に完了してるはずですが

投稿2018/06/14 09:28

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問