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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

401閲覧

C言語のコマンドライン引数を用いたコードで希望する実行結果が得られない

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/12/19 02:59

編集2017/12/19 03:27

###前提・実現したいこと
16進数または10進数の2つの整数を表示するコードを書いています。
2つの整数は共に16進数の場合もあるので、intではなく文字として入力しようとしています。16進数は「0x」を頭につけて、「0xabcd」のように入力します。Javaでは以下のように実装することができたのですが、C言語でコマンドライン引数を用いたコードに書き直す際に以下の点で困っています。

###発生している問題・エラーメッセージ
現状のコードをどのように変更すれば希望する実行結果が得られるのか分からず、困っています。

現状の実行結果

./example 0xA + 0xA 0 + N

希望する実行結果
入力された値を文字としてそのまま表示する

./example 0xA + 0xA 0xA + 0xA ./example 10 + 0xA 10 + 0xA ./example 10 + 10 10 + 10

###該当のコード

C

1#include<stdio.h> 2#include<stdlib.h> 3 4 5int main(int argc, char *argv[]) 6{ 7 int a; 8 int operator; 9 int b; 10 11 a = argv[1][0]; 12 operator = argv[2][0]; 13 b = argv[3][0]; 14 15 // aとbに対するprintfの変換指定文字を1文字から文字列に変更 16 printf("%s %c %s\n", a, operator, b); 17}

###補足情報(言語/FW/ツール等のバージョンなど)
Eclipse Java EE IDE for Web Developers.
Version: Neon.3 Release (4.6.3)
Build id: 20170314-1500

ターミナル バージョン2.8 (400)

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

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

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

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

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

guest

回答2

0

そのコードで希望する実行結果になるとは思えない。

format: %c は1文字を表すので、どう考えても 0xA とは書けない。

さらに、ここまでのやり取りで strtol で変換することを学んだのではないのか?
それをすっとばして望みの結果が得られるわけがないやろ。

投稿2017/12/19 03:08

episteme

総合スコア16614

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

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

0

ベストアンサー

え…
さっき回答したのが活かされてないのはなぜ…
https://teratail.com/questions/105445

c

1#include <stdio.h> 2 3int main(int argc, char *argv[]) 4{ 5 int a; 6 char operator; 7 int b; 8 9 a = strtol(argv[1], NULL, 0); 10 operator = argv[2][0]; 11 b = strtol(argv[3], NULL, 0); 12 13 printf("0x%X %c 0x%X\n", a, operator, b); 14} 15

投稿2017/12/19 03:04

編集2017/12/19 04:22
ttyp03

総合スコア16998

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

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

退会済みユーザー

退会済みユーザー

2017/12/19 03:26

ご回答いただきましてありがとうございます。 質問内容に正しく伝わっていない部分があり、訂正させていただきました。申し訳ございません。
episteme

2017/12/19 03:28

int値(aとb)を %s で出力してもゴミになるだけだよ?
退会済みユーザー

退会済みユーザー

2017/12/19 03:34

int型のoperatorはなぜint値にも関わらず、%cで文字として表示できているのでしょうか。
episteme

2017/12/19 03:45

int値を文字と見なしてくれるから。%sはint値を文字列と見なすことに失敗するから。
退会済みユーザー

退会済みユーザー

2017/12/19 03:48

わかりました。ありがとうございました。
episteme

2017/12/19 03:52

もっと言えば、%sは渡された値を"文字列の先頭を指すポインタ"と見なすから。 つまり printf("%s", 123) は 123番地から並ぶバイト列を文字列とみなし、そこを先頭に'\0'が見つかるまでプリントするため、結果ゴミとなる。
ttyp03

2017/12/19 04:03

epistemeさん> 代弁ありがとうございます。 ranranwayさん> ということですw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問