映画のエンドロール観る派?観ない派?

Microsoft Visual Studio Express 2013 for Windows DesctopでC言語の勉強を始めました。
以下のコードが正しく実行されないため、理由が知りたく質問させていただきます。

***********
#include<stdio.h>

int main(void)
{
char str[100];
int i, c;

c = 0;

printf("文字列を入力してください。\n");
scanf_s("%s", str);

for (i=0; str[i]!='\0'; i++){
c++;
}

printf("文字列の長さは%dです。\n", c);

return 0;
}
***********

見たまま、入力した文字列の長さを数えるコードです。
ですが、何を入力しても「文字列の長さは0です」と出力されます。
どこか誤字脱字などの初歩的なミスをしているのかと思い
何度も読み返してはみましたがわかりません。
それともVS2013の設定側の問題なのでしょうか。

ちなみに使用しているテキストは『やさしいC』(第3版)「Lesson7」の練習問題3です。

よろしくご教授お願いいたします。

A 回答 (1件)

「scanf_s」の使い方を間違えています。




入門書には、よくscanf が出てきます。
ですが、scanfは注意して使わないと、いろいろと問題が発生します。
そのため、VSでは「よりセキュアなscanf_sを使いましょう」と勧めてきます。

しかし、scanf とscanf_s とは使い方が微妙に違うので、 単純に 置き換えただけでは、期待通りには動作しません。
    • good
    • 0
この回答へのお礼

まさしく、でした。「#define _CRT_SECURE_NO_WARNINGS」を宣言することで解決しました。
scanf_sはscanfの上位互換だと捉えていたのが間違いでしたね。お恥ずかしい限り。精進します。ありがとうございました。

お礼日時:2015/08/21 19:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!