#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型の警告が出ているのですが修正方法がわかりません。よろしくお願いします
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。