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

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

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

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

Q&A

解決済

2回答

3348閲覧

C言語 dumpコマンド作成

kokok

総合スコア145

C

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

0グッド

1クリップ

投稿2019/08/09 01:58

c

1 2 3#include <stdio.h> 4#include <stdlib.h> 5#pragma warning(disable: 4996) 6 7#define H_PRT 0x02// ヘッダ印字オプション 8#define C_PRT 0x01// 文字印字オプション 9#define ROW 16 // 1行に表示する文字 10#define TESTBUF 512 //テストデータ用のバッファ 11#define TEXTBUF 16 //テキストファイル用のバッファ 12 13//プロトタイプ宣言 14void dump(char* title, unsigned char* staddr, int offset, int dsize, char opt); 15 16//オプション 17typedef struct { 18 19 char* infilename; 20 char prt_charflag; 21 char prt_headerflag; 22 char prt_ 23 24} opts_t; 25 26 27//オプションの解析 28opts_analisys(int argc , char *argv, char opts) { 29 30 int cnt; 31 char slash ="/"; 32 33 for (cnt = 1; cnt < argc; cnt++) { 34 35 if (argv[cnt].Contains(slash)) { 36 37 38 switch(argv[cnt]) 39 case "/h" 40 break; 41 42 } 43 44 } 45 46} 47 48int main(int argc, char* argv[]) { 49 50 51 char txt_data[TEXTBUF]; // テキストファイル読み込み用 52 int readnum; 53 opts_t opts; 54 int result; 55 56 57 FILE* file; 58 59 if (opts.infilename != 0) { 60 file = fopen(opts.infilename, "rb"); 61 }else{ 62 file = stdin; 63 } 64 65 result = opts_analisys(argc, argv, &opts); 66 67 68 while (readnum = fread(txt_data, sizeof(unsigned char), TEXTBUF, file) > 0) { 69 70 dump("テキストファイル", txt_data, 0, TEXTBUF, C_PRT); 71 } 72 fclose(file); 73} 74

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

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

上記の  argv のところで 

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

case "/h"  のところで

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

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

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

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

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

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

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

guest

回答2

0

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

に対して

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

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

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

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

投稿2019/08/09 02:06

mather

総合スコア6753

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

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

kokok

2019/08/09 02:31

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

2019/08/09 02:44

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

0

ベストアンサー

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

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

case "/h"  のところで

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

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

投稿2019/08/09 02:02

otn

総合スコア84499

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

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

kokok

2019/08/09 02:18

if (argv[cnt].Contains(slash)) ここは if (strstr(argv[cnt], slash) !=NULL) 書いたら大丈夫でしょうか? 基礎から勉強しなおします。
mather

2019/08/09 02:24

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

2019/08/09 07:30

> char slash ="/"; は、 char *slash ="/"; か char slash[] ="/"; ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問