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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3143閲覧

【C言語の質問です】文字数を求めるには・・・

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2016/02/22 06:04

C言語を勉強している初心者のものです。

今課題をいただき、その作成をしております。
先日提出したのですが、大部分が間違っているので、
再度問題を見なおした上で提出してくれと言われてしまいました。

今回は課題なので、間違っている点を教えていただけませんでした。
個人的には、どの辺りが間違っているのかわからないため、
客観的な視点が欲しく、今回ご相談させていただきました。

ソースが問題文との趣旨と外れているようでしたら
ご指摘いただけますと幸いです。

【問題】
文字列を入力し、その文字数を求めよ。(入力する文字は半角のみとする)

【回答】

#include <stdio.h> #include <string.h> int main(void) { int i; char str[256]; printf("半角で文字を入力してください。\n"); scanf("%s",str); i = strlen(str); printf("入力された文字数は%dです。\n",i); return 0; }

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

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

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

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

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

guest

回答2

0

ベストアンサー

他の質問にも書いてますが、この課題の狙いが何か、ですよね。
文字数を知るにはstrlen関数を使えばいいというのを教えたので、それを正しく使えるか?
C言語の文字列というのはNULLで終わるということを理解しているか?
→ つまり文字列の先頭アドレスからNULLまでの文字数をカウントするプログラムが作れるか?
どちらかでしょうね。
たぶん後者だと思いますがどうなんでしょう。
しっかり勉強している、理解していることを示すなら、この2パターンを作れば文句ないと思いますよ。

投稿2016/02/25 08:11

ttyp03

総合スコア16998

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

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

退会済みユーザー

退会済みユーザー

2016/02/26 00:57

ご回答ありがとうございます。 仰るとおり、後者の可能性も考えられますので、 両方作ってみます。
WoodenHamlet

2016/02/26 01:49 編集

NULL と ヌル文字は別物ですよ NULL: いかなるオブジェクトや関数へのポ インターと比較しても等しくなることがないことを保証されている「ポインタ」…をあらわすマクロ。 ヌル文字:文字列の終端をあらわす「値」。ふつう'\0'であらわされる。 内部データとしてはどちらも0x00になるかもしれないけど型が違うし…
ttyp03

2016/02/26 01:49

確かに正確な表現ではありませんでした。 NULLと書かずヌルと書くべきでした。 指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/02/28 03:49

WoodenHamletさん 補足説明ありがとうございます。 とてもわかりやすかったです!!
guest

0

こんにちは。

問題文の主旨から大幅なずれはないと思います。
中級者ならば255文字を超える文字列を入力すると可笑しくなる点は間違いと言われるかも知れませんが、初心者にそこまで突っ込むのはちょっと厳しすぎると思いますし、それを「大部分が間違っている」とは表現しないと思います。

背景として、授業で習っていない関数は使ってはいけないということはありませんか?
もし、C言語の文字列について習ったばかりならば、strlenは使わない方がよいと思います。

後はちょっと無理矢理ですが、(入力する文字は半角のみとする)ではなくて、(入出力する文字は半角のみとする)となっているとか?

投稿2016/02/22 06:42

Chironian

総合スコア23272

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

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

退会済みユーザー

退会済みユーザー

2016/02/22 06:51

ご回答ありがとうございます。 お話いただきました背景部分ですが、 strlenは習っておりますので問題なさそうです。 >後はちょっと無理矢理ですが、(入力する文字は半角のみとする)ではなくて、 >(入出力する文字は半角のみとする)となっているとか? こちらは問題を見なおしてみましたが、大丈夫そうでした。 ご回答いただけて安心しました。 また私の説明不足で誤解を招いてしまい、申し訳なかったのですが、 大部分というのは、課題が18問ある中の大部分という意味でした・・ 改めて、助かりました。ありがとうございました。
Chironian

2016/02/22 07:10

18問の大部分という意味でしたか。了解です。
rubato6809

2016/02/23 02:46 編集

いや、256文字(終端の'\0'を除けば255文字)という制約は、評価が低くなる気がします。 プログラムの動作環境が変われば、255文字を超える文字列など、いくらでも出現します。その環境では、あなたのプログラムは使えない、ということになります。制約が無いほうが広く使える(汎用性がある)ので、プログラムの価値が高いことは理解できると思います。 strlen()関数を使えば一発…、それはプログラムを書く立場からすれば楽ですが、使う立場から見たら制約があって使いにくい。その楽を捨てて、なるべく制約が少ない設計をする姿勢が求められていると思います。 さらに言えば、配列のサイズ256を1000に増やそうが10000に増やそうが、その大きさの制約から逃れる事はできませんし、サイズを増やせば増やすほど、メモリを無駄に使うという問題が大きくなります。 文字数を数えるだけなら、文字列全体をメモリ(ここではstr[])に格納する必要は無いはずです。
Chironian

2016/02/23 03:27

rubato6809さん。 「初心者にどこまで求めるか」についての異なる見方ですし、rubato6809さん自身のアイデアが入ってますので、コメントよりは回答とされた方が良いように思いますよ。
退会済みユーザー

退会済みユーザー

2016/02/24 23:28

rubato6809 さん ご回答ありがとうございます。 仰るとおり、その意識はとても大事だと感じました。 使い立場に立ってプログラムを作る姿勢は基本的なことですね。 ありがとうございます。 今後も気をつけていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問