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

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

ただいまの
回答率

88.19%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 2,305
退会済みユーザー

退会済みユーザー

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;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/02/26 09:57

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

    キャンセル

  • 2016/02/26 10:08 編集

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

    内部データとしてはどちらも0x00になるかもしれないけど型が違うし…

    キャンセル

  • 2016/02/26 10:49

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

    キャンセル

  • 2016/02/28 12:49

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

    キャンセル

0

こんにちは。

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

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/02/23 11:41 編集

    いや、256文字(終端の'\0'を除けば255文字)という制約は、評価が低くなる気がします。

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

    文字数を数えるだけなら、文字列全体をメモリ(ここではstr[])に格納する必要は無いはずです。

    キャンセル

  • 2016/02/23 12:27

    rubato6809さん。

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

    キャンセル

  • 2016/02/25 08:28

    rubato6809 さん

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

    キャンセル

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

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

関連した質問

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