私は、Linuxを使用してgccでコンパイルし、エラーを取得しています:警告:関数「fopen_s」の暗黙的な宣言、缶誰かの助けが私はこの問題を解決しますか?

ライスマン:

私はC言語で簡単なエッジ検出プログラムを作成しようとしています。私は、Red Hat Enterprise Linux Serverの7.7(マイポ)、およびGCCのバージョン4.8.5を使用しています。

これは、コードの始まりです。

#include <stdio.h>

#define size 200

int _tmain(int argc, _TCHAR* argv[])
{
    char filein[size] = "./image.bmp";

    FILE *fin;

    fopen_s(&fin, filein, "rb");

return 0;

}

私は当初、そう最終的に私は文字に置き換え、これは後で問題になる場合、私はわかりませんが、少なくとも、それがコンパイルされ、これらのエラーを処分した* _TCHARを持つ多くの問題がありました。今私は、暗黙的な宣言の警告を取得しています。私は他の#はのを含んで追加することによって、それを修正しようとしました。

私はそれを修正しようとしました:

#include <stdio.h>
#include <errno.h>
#include <string.h>

#define size 200

int main(int argc, char* argv[])
{
    char filein[size] = "./image.bmp";

    FILE *fin;

    fopen_s(&fin, filein, "rb");

return 0;

}

しかし、私はまだ同じ警告、誰かが私が間違ってやっているものを私に伝えることができますを取得していますか?

ありがとうございました。

どうもありがとう、この作品!

#include <stdio.h>

#define size 200

int main(int argc, char* argv[])
{

    char filein[size] = "./image.bmp";

    FILE *fin;

    fin = fopen(filein, "rb");

return 0;

}
クリスチャン・ギボンズ:

_s機能のシリーズはC規格のアネックスKからオプション機能であり、めったに任意のCの実装では、附属書K.はるかに議論されて、附属書Kに導入された「安全な」機能の実際の効用を実現するために気にしないん。ただ、これらの機能を捨て、そのように標準関数を使用fopen

私が今までに遭遇した唯一の時間_sの関数は、Windowsのために書かれたコードになっている、とMicrosoftは附属書K.における標準セットの規定に適合しないこれらの機能の独自のバージョンを含んでいます

附属書Kの有用性を調べる研究のためにここを参照してください:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm

彼らの結論:

ISO / IEC TR 24731-1の批准以来、当初の提案以来、十年以上、ほぼ10年にもかかわらず:2007、およびCの標準に境界チェックインタフェースの導入以来、ほぼ5年間、何も実行可能な適合実装は出現していません。APIは、論争のであり続けると実装のための要求は、実装者によって拒否され続けています。

正しいにあまりにも多くの問題から、境界チェックインタフェース、しかし善意、被るのデザイン。APIを使用すると、確立のアプローチや近代的な技術に頼るよりも悪い品質、安全性の低いソフトウェアにつながることが確認されています。より効果的かつ控えめなアプローチが一般的になっていると、多くの場合、同様にユーザーやセキュリティの専門家によって好まれます。

したがって、我々は、付属書Kは、いずれかのC標準の次のリビジョンから除去、又は廃止され、その後除去されることを提案します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=14293&siteId=1