[C言語練習]配列を使用した文字のカウント

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
さんざし

[C言語練習]配列を使用した文字のカウント

#1

投稿記事 by さんざし » 5年前

夜分に失礼いたします。
C言語を初めて3か月過ぎの初心者です。
用語を覚えつつあるのですが、何分覚えられていない
用語のほうが多いため、よろしければお手柔らかにご教授いただきたく存じます。

C言語の練習に文字をカウントするプログラムを組んでみたのですが、
うまくいかずに困っています。

環境はx64,visualstudio2019,c++の空のフォームから作成しています。

組んでみたプログラムを下記に示します。

#include <stdio.h>

int main()
{
char word[100] = {};
int cnt = 0;

printf("\n文字、数字を入力してください。=");

scanf_s("%c", &word);

for (cnt = 0; word[cnt] != '\0'; ++cnt)

printf("入力文字数:%d\n", cnt);


return 0;

}
現状の問題
「アドレス(0x00.....)の読み取り中にアクセス違反が発生しました」と表示が出る
scanf_s("%c", &word);に緑の波線が引かれ、「’scanf_s’(変換指定子’2’に対応する)への引数がありません。」
デバッグなしで追うとすべて0で通過し、出力結果も0となる。

記入内容に至らない点もあるかとは思いますがご鞭撻をよろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: [C言語練習]配列を使用した文字のカウント

#2

投稿記事 by みけCAT » 5年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l | Microsoft Docs
によれば、scanf_s関数の%c指定子を使う際は、読み込み先の次の引数としてバッファサイズを指定しなければいけません。
また、文字列を読み込むには、%cではなく%sを使うのがいいでしょう。
%s指定子を使う際も、読み込み先の次の引数としてバッファサイズを指定しなければいけません
更に、式中の(sizeof演算子のオペランドなど一部を除く)配列は先頭要素へのポインタに変換され、
%c指定子や%s指定子はchar*型のデータを要求するので、
&wordの代わりにwordを渡すべきでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さんざし

Re: [C言語練習]配列を使用した文字のカウント

#3

投稿記事 by さんざし » 5年前

丁寧なご返答ありがとうございました。
おかげさまで、最後まで作ることができました!

拙い投稿にもかかわらず返答していただき申し訳ありません。
今後気を付けます。

返信

“C言語何でも質問掲示板” へ戻る