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

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

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

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

Q&A

解決済

2回答

7596閲覧

C言語 型が違うという警告

junnnnchan

総合スコア26

C

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

0グッド

1クリップ

投稿2020/06/15 13:16

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct {/*--- キューを実現する構造体 ---*/ int max; /* キューの容量 */ int num; /* 現在の要素数 */ int front;/* 先頭要素カーソル */ int rear; /* 末尾要素カーソル */ int **que; /* キュー本体(の先頭要素へのポインタ) */ } StringsQueue; /*--- キューの初期化 ---*/ int Initialize(StringsQueue *q, int max){ q->num = q->front = q->rear = 0; if ((q->que = calloc(max, sizeof(char *))) == NULL) { q->max = 0; /* 配列の確保に失敗 */ return -1; } q->max = max; return 0; } /*--- キューの後始末 ---*/ void Terminate(StringsQueue *q){ if (q->que != NULL) { free(q->que);/* 配列を解放 */ q->max = q->num = q->front = q->rear = 0; } } /*--- キューにデータをエンキュー ---*/ int Enque(StringsQueue *q, char *x){ if (q->num >= q->max)return -1; if ((q->que[q->rear] = calloc(strlen(x)+1, sizeof(char))) == NULL)return -1; /* キューは満杯 */ q->num++; strcpy( q->que[q->rear] ,x); q->rear++; if (q->rear == q->max) q->rear = 0; return 0; } /*--- キューからデータをデキュー ---*/ int Deque(StringsQueue *q, char *x){ if (q->num <= 0)/* キューは空 */ return -1; q->num--; strcpy( x ,q->que[q->front]); free(q->que[q->front]); q->front++; if (q->front == q->max) q->front = 0; return 0; } /*--- キューからデータをピーク 次のデキューで取り出される値を見る---*/ int Peek(const StringsQueue *q, char *x) { if (q->num <= 0) return -1; x = q->que[q->front]; return 0; } /*--- キューの容量 ---*/ int Capacity(const StringsQueue *q){ return (q->max); } /*--- キューに蓄えられているデータ数 ---*/ int Size(const StringsQueue *q){ return (q->num); } /*--- 全データの表示 ---*/ void Print(const StringsQueue *q){ int i; for(i = 0; i < q->num; i++) printf("%s ", q->que[(i + q->front) % q->max]); putchar('\n'); } int main(void){ StringsQueue que; if (Initialize(&que, 7) == -1) { puts("キューの生成に失敗しました。"); } while (1) { int m; char x[79]; printf("現在のデータ数:%d/%d\n", Size(&que), Capacity(&que)); printf("(1) エンキュー (2) デキュー (3) ピーク (4) 表示 (0) 終了:"); scanf("%d", &m); if (m == 0) break; switch(m){ case 1: printf("データ:"); scanf("%s", x); if (Enque(&que, x) == -1) puts("\a エラー:データのエンキューに失敗しました。"); break; case 2: if (Deque(&que, x) == -1) puts("\a エラー:デキューに失敗しました。"); else printf("デキューしたデータは%s です。\n", x); break; case 3: /* ピーク */ if (Peek(&que, x) == -1) puts("\a エラー:ピークに失敗しました。"); else printf("ピークしたデータは%s です。\n", x); break; case 4: /* 表示 */ Print(&que); break; } } Terminate(&que); return 0; }

エラー文
main.c:33:16: warning: passing argument 1 of ‘strcpy’ from incompatible pointer type [-Wincompatible-pointer-types]
/usr/include/string.h:129:14: note: expected ‘char * restrict’ but argument is of type ‘int *’
main.c:44:19: warning: passing argument 2 of ‘strcpy’ from incompatible pointer type [-Wincompatible-pointer-types]
/usr/include/string.h:129:14: note: expected ‘const char * restrict’ but argument is of type ‘int *’
main.c:55:7: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
main.c:71:18: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int *’ [-Wformat=]
<質問>
プログラムは正しく動作するのですが、警告文が消えません。int型の警告が出ているのですが修正方法がわかりません。よろしくお願いします

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

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

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

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

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

guest

回答2

0

自己解決

ストラクトのなかをcharに変換

投稿2020/06/15 13:33

junnnnchan

総合スコア26

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

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

0

デバッグできる環境を整えようよ。(再

typedef struct {/--- キューを実現する構造体 ---/

int max; /* キューの容量 */ int num; /* 現在の要素数 */ int front;/* 先頭要素カーソル */ int rear; /* 末尾要素カーソル */ int **que; /* キュー本体(の先頭要素へのポインタ) */

} StringsQueue;

que はなぜint** なのか説明できるでしょうか

投稿2020/06/15 13:19

y_waiwai

総合スコア87749

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

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

junnnnchan

2020/06/15 13:21

そこもchar型にするんですね!
y_waiwai

2020/06/15 13:24

あえてノーコメントとしときます。
junnnnchan

2020/06/15 13:26

間違えているということですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問