96604


[編集済み]

Visual Studio Community 2022を使って、次のようなコードを作成しました。

[code]

    #pragma warning(disable:4996)
    #include <stdio.h>
    int main()
    {
        int d;
        char A[10];
        scanf("%d",&d);
        gets(A);
        printf("d=%d, A[]=\"%s\"",d,A);
        return 0;
    }
    
[/code]

そして次のようなwarningが発生しました。  
`warning C4013: 関数 'gets' は定義されていません。int 型の値を返す外部関数と見なします。`

コードを起動し、`3`(適当なint 1つ)を入力してEnterしたら  
`gets(A);`が無視されてOutputは`d=3, A[]=""`になりました。

`gets()`関数を定義するために`<stdio.h>`を`include`していますが、warningのように`gets()`が定義されていなかったので使えなくなったと思われます。  
C言語の初心者の私の間違ったところがありましたら教えて下さると助かります。

ただし、私の学校の授業から入力関数は`scanf()`、`gets()`、`getchar()`しかならってませんので、`scanf_s()`、`gets_s()`、`fgets()`などを使わない限りでお願いします。


CC BY-SA 4.0
2023-10-27T18:19:01.477
96603
2023-10-28T18:18:37.407
2023-10-28T18:18:37.407
60230
60230
question
c
C言語の<stdio.h>のgets()が定義されません。


`gets()`はバッファーオーバーランが発生する危険な関数のため、Visual Studio 2015以降使用できなくなりました。  
<https://learn.microsoft.com/ja-jp/cpp/c-runtime-library/gets-
getws?view=msvc-170>

* * *

## 追記

プロトタイプ宣言されなくなっただけで、まだ定義はあるようなので、自分でプロトタイプ宣言すれば使えます。  
ただし、正しいやり方ではないため、お薦めはしません。

[code]

    #ifdef _MSC_VER
    #pragma warning(disable:4996)
    #endif
    #include <stdio.h>
    char *gets(char *buffer);
    
[/code]


CC BY-SA 4.0
2023-10-27T22:57:51.057
96604
2023-10-28T01:51:28.143
2023-10-28T01:51:28.143
7291
7291
96603
answer