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

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

ただいまの
回答率

87.37%

C言語 dumpコマンド作成

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 1,785

score 109

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable: 4996)

#define H_PRT 0x02// ヘッダ印字オプション 
#define C_PRT 0x01// 文字印字オプション
#define ROW 16 // 1行に表示する文字
#define TESTBUF 512 //テストデータ用のバッファ
#define TEXTBUF 16 //テキストファイル用のバッファ

//プロトタイプ宣言
void dump(char* title, unsigned char* staddr, int offset, int dsize, char opt);

//オプション
typedef  struct {

    char* infilename;
    char prt_charflag;
    char prt_headerflag;
    char prt_

} opts_t;


//オプションの解析
opts_analisys(int argc , char *argv, char opts) {

    int cnt;
    char slash  ="/";

    for (cnt = 1; cnt < argc; cnt++) {

        if (argv[cnt].Contains(slash)) {


            switch(argv[cnt])
            case  "/h"
            break;

        }

    }

}

int main(int argc, char* argv[]) {


    char txt_data[TEXTBUF]; // テキストファイル読み込み用
    int readnum;
    opts_t opts;
    int result;


    FILE* file;

    if (opts.infilename != 0) {
        file = fopen(opts.infilename, "rb");
    }else{
        file = stdin;
    }

    result = opts_analisys(argc, argv, &opts);


    while (readnum = fread(txt_data, sizeof(unsigned char), TEXTBUF, file) > 0) {

        dump("テキストファイル", txt_data, 0, TEXTBUF, C_PRT);
    }
    fclose(file);
}

コマンドラインからもらった引数で(ファイル名、オプションなど) ダンプ出力したいと考えてます。

オプションの解析で
if (argv[cnt].Contains(slash)) {
switch(argv[cnt])
case  "/h"
break;

上記の  argv のところで 

式には構造体または共用体型が必要です

case  "/h"  のところで

式は整数定数式である必要があります

原因が分からなかったのでアドバイス頂けると助かります

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2019/08/09 11:51

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

+1

if (argv[cnt].Contains(slash)) {

なんか、Cと他の言語を間違えている気がします。
Cでプログラムを書きたければ、Cを勉強しましょう。

case  "/h"  のところで
式は整数定数式である必要があります 

メッセージの通りで、caseの後に書けるのは、整数定数式だけです。
これも、Cを勉強しましょうと言う事ですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/09 11:18

    if (argv[cnt].Contains(slash))
    ここは

    if (strstr(argv[cnt], slash) !=NULL)
    書いたら大丈夫でしょうか?

    基礎から勉強しなおします。

    キャンセル

  • 2019/08/09 11:24

    strstrの第2引数は char * 型です。一方 slash は char 型ですのであっていません。

    キャンセル

  • 2019/08/09 16:30

    > char slash ="/";
    は、
    char *slash ="/";

    char slash[] ="/";
    ですね。

    キャンセル

+1

int main(int argc, char* argv[]) {


に対して

opts_analisys(int argc , char *argv, char opts) {


は引数の型があっていませんし、そもそも返り値の型が指定されていません。

.Contains() はおそらくC#ですし、適当なものを混ぜ込みすぎです。

ここに質問するより、文法の基礎から勉強し直すことをおすすめします。 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/09 11:31

    opts_analisys(int argc , char *argv[], char opts) {
    引数はこうでしょうか?

    キャンセル

  • 2019/08/09 11:44

    そこはそれで合っていると思うのですが、このやり取りを一つずつするつもりでしょうか?
    手取り足取り教えるのは手間がかかりすぎますので回答できかねます。
    質問する前にまずは自分でコードを書いてコンパイルしてエラーを解消して、それでもどうしてもわからないことに絞ってから質問してください。

    キャンセル

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る