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

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

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

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

Q&A

解決済

5回答

2784閲覧

文字による分岐

natuhi

総合スコア24

C

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

0グッド

0クリップ

投稿2017/03/01 11:34

C言語の勉強をするにあたり文字による分岐について最近悩んでおります。
入力された文字を判別してそれにあった分岐を進み処理をするにも多くのやり方があると思います。
私はstrcmp関数など使っての判別をするようにしていますが、
実務ではどのようにコーディングされていますか?
また、入力されるものが1文字の場合と文字列の場合では使い分けていたりしますでしょうか?
どうかご指導ご鞭撻のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答5

0

C言語の勉強ということなら、あまり気にせずに、まずは標準関数をどんどん使っていけば良いと思います。

実務においては、特殊な用途以外ではC言語そのものを使うケースはほとんどなく、ほぼC++なので、セキュリティ対策もあって文字列がらみでC標準関数を使うことはほとんどありません。基本的にはSTLのstring系クラスを使いますが、フレームワークが提供する文字列クラスを使うこともあります(例えばWindowsでMFCやATLを使う場合はCString)。

また、入力されるものが1文字の場合と文字列の場合では使い分けていたりしますでしょうか?

使い分けます。文字はC/C++では数値としての扱いなので、文字列として扱うよりもコードが単純化できます。

投稿2017/03/01 14:14

catsforepaw

総合スコア5938

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

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

Chironian

2017/03/01 14:18

> C言語の勉強ということなら、あまり気にせずに、まずは標準関数をどんどん使っていけば良いと思います。 確かに!!
natuhi

2017/03/02 07:53

ご回答ありがとうございます! C++なのですね! 私はまだ文字は文字という考えにとらわれていて数値として扱うという感覚になれていないので少しづつそういうコーディングをして慣れていこうと思います! それとおっしゃっていただいた通り様々な関数を使っていこうと思います! この度はありがとうございました。
guest

0

ベストアンサー

こんにちは。

私はstrcmp関数など使っての判別をするようにしていますが、

実務ではどのようにコーディングされていますか?

昔はよくC言語でファームウェアを開発してましたが、当時はそもそも標準ライブラリを使うなんて贅沢はできませんでした。最近もそれほど状況は変わらないような話を聞きます。

アセンブラだとCPUベンダーを簡単に変更できません。しかし、C言語ならCPUベンダーの変更が容易です。
なので、アセンブラではなくC言語で書くことでCPUを相見積もりしてリーズナブルな価格で買ったり、メーカのCPU供給能力不足への保険にしたり等の工夫をしてました。生産性もアセンブラよりかなり高いですし。

また、C言語自体に比べてCの標準ライブラリは使い方がたいへん難しいと言う問題もあります。
小規模なファームウェアの場合、あれだけ落とし穴が多いライブラリを使うよりは、自作した方が生産性は高いです。strcmpも実務では使っては行けない系の関数です。

また、入力されるものが1文字の場合と文字列の場合では使い分けていたりしますでしょうか?

当然使い分けます。1文字処理と複数文字処理では、面倒臭さが段違いです。
C言語で複数文字処理する場合、常にバッファ・オーバーラン対策を考えないといけないので超面倒です。

ベターCとしてC++を使っていた時は、今にして思えば愚かにも、Cの標準ライブラリを苦労に苦労を重ねてstrncmp()とかsnprintf()などなどを使ってました。当時、STLを知っていたら、せめてstd::stringを知っていたらと反省してます。


【蛇足ですが】
C言語自体はなかなか優れた言語と思うのですが、標準ライブラリは行けません。問題が多く実務で使うのは頭痛いです。
C言語のコア部分はポインタと構造体の組み合わせくらいしか難しいことはないので、一通りマスターされたらC++へ進むと良いですよ。

投稿2017/03/01 13:45

Chironian

総合スコア23272

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

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

natuhi

2017/03/02 08:16

ご回答ありがとうございます! リンクを貼っていただいたり丁寧な説明で感動しています!! やはりstrcmpもダメなのですね(;´・ω・) 今後自作もやってみようかと思います。 バッファオーバーランのサイトもよく読んで勉強します。 ポインタと構造体の組み合わせた問題もこなし少しは理解しているので もうしばらくしたらChironianさんのおっしゃる通りC++に進もうとおもいます!! Chironianさんのプロフィールにあるサイトのほうも利用させていただこうと思います!! この度は誠にありがとうございます。
Chironian

2017/03/02 08:41

いいえ、頑張ってください。 > Chironianさんのプロフィールにあるサイトのほうも利用させていただこうと思います!! C++の入門講座ですが、文法面から攻めているサイトは多いのでコンピュータの仕組み側から攻めてみてます。まだC言語レベルまでしか進んでませんが、徐々にC++へも進めていきます。よろしく!!
guest

0

文字列の場合だとstrcmp/strncmp、1文字だとswtich caseでしょうか。使い分けます。

投稿2017/03/01 13:25

otn

総合スコア84423

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

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

natuhi

2017/03/02 08:19

ご回答ありがとうございます!! 勉強になります!! これからも楽しみつつ勉強していこうと思います。 この度はありがとうございました!!
guest

0

また、入力されるものが1文字の場合と文字列の場合では使い分けていたりしますでしょうか?

やはり使い分けますね。1文字ならswitchかifなど、文字列なら標準関数か気に入ったものがない環境またはないときは自分で関数作っています。特に組み込み関連だとほぼ自分でなるべく処理が軽い小さいもので済ませています。

投稿2017/03/02 00:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

natuhi

2017/03/02 07:40

ご回答ありがとうございます!! やはりそうなのですね! 勉強になりました! ありがとうございます
guest

0

もちろん使い分けます。
但し業務(仕様)によっては文字も文字列も文字列で処理した方がコーディングの効率が良いなどありますから、そこらへんは臨機応変に対応します。
逆に効率よりも処理時間優先の場合は文字で処理したりなどする場合もあります。
入力は1文字だから文字で処理、とか決めてかからずに、まずはやりやすい方法でどんどんコーディングして行くのが良いと思います。

投稿2017/03/02 00:02

ttyp03

総合スコア16996

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

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

natuhi

2017/03/02 07:43

ご回答ありがとうございます! 自分もある程度C言語が理解できるようになり、効率のいいコーディング、より短くわかりやすいものをと意識していましたが、それに縛られすぎていたようです。 ttyp03さんのおっしゃるとおりにまずはやりやすい方法でどんどんコーディングしていこうと思います! 今回はありがとございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問