IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

la libraire "iostream.h" n'existe pas !


Sujet :

C++

  1. #1
    Débutant
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 35
    Points
    35
    Par défaut la libraire "iostream.h" n'existe pas !
    Salut,

    J'ai remarqué que la libraire "iostream.h" n'existe pas dans les fichiers include de Visual studio 2008 sous windows.

    Voici mon code C++ de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <iostream.h>
    #include<stdio.h>
     
    int main()
    { 
    	FILE * fp_con;
        cout << "Hello world!";
    	fp_con = fopen("essai.txt","r+");
    	if(!fp_con)
    	{
    	    cout<<"erreur lors de l'ouverture du fichier";
    	    getch();
    	    exit(0);
    	}
     
        return 0;
    }
    Après la compilation, j'ai ce message:

    1>------ Début de la génération : Projet : stoph, Configuration : Debug Win32 ------
    1>Compilation en cours...
    1>main.c
    1>c:\stoph\stoph\main.c(1) : fatal error C1083: Impossible d'ouvrir le fichier include : 'iostream.h' : No such file or directory
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\stoph\stoph\Debug\BuildLog.htm"
    1>stoph - 1 erreur(s), 0 avertissement(s)
    ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

    Je ne sais pas quelle librairie qui va remplacer la libraire standard "iostream.h" ?

    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Débutant
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 35
    Points
    35
    Par défaut
    Salut,

    - J'ai remarqué que la libraire "iostream.h" n'existe pas dans les
    fichiers include de Visual studio 2008 sous windows.
    Je ne sais pas quelle librairie qui va remplacer la libraire standard
    "iostream.h" ?

    - Quelle est la différence entre main et _tmain ?

    - Quelle est la différence entre strncpy() et strcpy() ?

    - Quelle est la différence entre char et -TCHAR ?

    -Quelle est le rôle du _TCHAR et tchar.h ?

    Merci.

  4. #4
    Débutant
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 35
    Points
    35
    Par défaut
    Salut,

    J'ai testé le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #include <tchar.h>
    #include <iostream>
     
    #define MAXLINE 1024
     
    int _tmain(int argc, _TCHAR* argv[])
    {
            char sLine[MAXLINE];
            char sNum[10], sAttrib[32];
            FILE *pFile, *pFileOut;
            pFile = fopen("test.txt","r");
            pFileOut = fopen("test2.txt","w");
            if (pFile && pFileOut)
            {
                    while (fgets(sLine, MAXLINE, pFile))
                    {
                            strncpy(sNum, sLine, 5);
                            sNum[5] = '\0';
                            strncpy(sAttrib, &sLine[5], 6);
                            sAttrib[6] = '\0';
                            if (strcmp(sAttrib, "000000") != 0)
                                    fprintf(pFileOut, "%s%s\n", sNum,
    sAttrib);
                    }
                    fclose(pFile);
                    fclose(pFileOut);
            }
            return 0;
    }
    Après la compilation, j'ai le message suivant portant les 4 warrings :

    1>------ Début de la génération : Projet : amani, Configuration :
    Debug Win32 ------
    1>Compilation en cours...
    1>main.cpp
    1>c:\amani\amani\main.cpp(11) : warning C4996: 'fopen': This function
    or variable may be unsafe. Consider using fopen_s instead. To disable
    deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include
    \stdio.h(237) : voir la déclaration de 'fopen'
    1>c:\amani\amani\main.cpp(12) : warning C4996: 'fopen': This function
    or variable may be unsafe. Consider using fopen_s instead. To disable
    deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include
    \stdio.h(237) : voir la déclaration de 'fopen'
    1>c:\amani\amani\main.cpp(17) : warning C4996: 'strncpy': This
    function or variable may be unsafe. Consider using strncpy_s instead.
    To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help
    for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include
    \string.h(157) : voir la déclaration de 'strncpy'
    1>c:\amani\amani\main.cpp(19) : warning C4996: 'strncpy': This
    function or variable may be unsafe. Consider using strncpy_s instead.
    To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help
    for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include
    \string.h(157) : voir la déclaration de 'strncpy'
    1>Édition des liens en cours...
    1>Incorporation du manifeste en cours...
    1>Le journal de génération a été enregistré à l'emplacement "file://c:
    \amani\amani\Debug\BuildLog.htm"
    1>amani - 0 erreur(s), 4 avertissement(s)
    ========== Génération : 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été
    ignoré ==========

    - Comment résoudre ces warings ?

    - J'ai remarqué que la libraire "iostream.h" n'existe pas dans les fichiers include de Visual studio 2008 sous windows.
    Je ne sais pas quelle librairie qui va remplacer la libraire standard "iostream.h" ?

    - Quelle est la différence entre main et _tmain ?

    - Quelle est la différence entre strncpy() et strcpy() ?

    - Quelle est la différence entre char et -TCHAR ?

    -Quelle est le rôle du _TCHAR et tchar.h ?

    Merci.

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par vivaviva Voir le message
    - J'ai remarqué que la libraire "iostream.h" n'existe pas dans les
    fichiers include de Visual studio 2008 sous windows.
    Je ne sais pas quelle librairie qui va remplacer la libraire standard
    "iostream.h" ?
    Le header standard est iostream, pas iostream.h. La FAQ n'était pas assez claire ?
    Citation Envoyé par vivaviva Voir le message
    - Quelle est la différence entre main et _tmain ?
    main est le point d'entrée standard d'un programme. _tmain est une spécificité Microsoft, sur la façon dont ils gèrent l'unicode (cf plus loin).
    Citation Envoyé par vivaviva Voir le message
    - Quelle est la différence entre strncpy() et strcpy() ?
    Avec strncpy, on spécifie une longueur, ce qui évite les dépassements de buffer. Mais de toute manière, en C++, on utilisera plutôt std::string.
    Citation Envoyé par vivaviva Voir le message
    - Quelle est la différence entre char et -TCHAR ?
    Idem qu'entre main et _tmain
    Citation Envoyé par vivaviva Voir le message
    -Quelle est le rôle du _TCHAR et tchar.h ?
    Afin de gérer des caractères de plus de 8 bits, C++ fourni le type wchar_t en plus du type char. De même, quasiment toutes les fonctions windows qui prennent des chaînes de caractère existent en 2 versions depuis que Windows travaille en interne en UTF16 : MaFonctionA et MaFonctionW.

    Microsoft a pensé que pour simplifier le travail d'un développeur qui voudrait passer de chaînes 8 bits en chaînes 16 bits, le plus simple était de fournir tout un jeu de macros qui permettent de gérer simplement le basculement d'une version à l'autre. Ainsi, selon des options, _TCHAR peut vouloir dire char ou wchar_t. De même, _tmain peut vouloir dire main ou wmain (une extension Microsoft qui lit les arguments de ligne de commande comme des wchar_t). Et MaFonction peut vouloir dire MaFonctionA ou MaFonctionW.

    Pour moi, c'est une fausse bonne idée, car un vrai programme n'est pas entièrement avec un mode de chaîne, mais doit en gérer plusieurs explicitement. Par défaut, des wchar_t (et des wstring) mais il faut gérer tout type de fichiers, de messages réseau... qui sont avec d'autres encodages. Et toutes ces macros posent régulièrement des problèmes.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Quant à tes warning, ça veut dire que les fonctions correspondantes ne sont pas "sûres", c'est-à-dire que mal utilisées elles peuvent provoquer un SEGFAULT/exécuter du code malveillant.

    Et donc qu'il faudrait utiliser les mêmes fonctions avec un "_s" après.

    Mais faire cela rendra probablement ton code incompilable sur GCC car je crois que ces fonctions avec un "_s" n'existent pas sur gcc (du moins dans le standard).

    Après si tu utilises de façon appropriée ces fonctions "non sécurisées", tu n'auras pas de problèmes. Je ne sais pas comment enlever les warning, mais si tu utilise les fstream pour gérer les fichiers tu n'en auras pas (alternative orientée objet pour la gestion des fichiers faisant partie du standard C++)

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Quant à tes warning, ça veut dire que les fonctions correspondantes ne sont pas "sûres", c'est-à-dire que mal utilisées elles peuvent provoquer un SEGFAULT/exécuter du code malveillant.

    Et donc qu'il faudrait utiliser les mêmes fonctions avec un "_s" après.

    Mais faire cela rendra probablement ton code incompilable sur GCC car je crois que ces fonctions avec un "_s" n'existent pas sur gcc (du moins dans le standard).
    Les fonctions XXXX_s sont non standard, les utiliser rends le code non portable d'une manière générale et pas seulement non portable sur gcc.

    Citation Envoyé par coyotte507 Voir le message
    Après si tu utilises de façon appropriée ces fonctions "non sécurisées", tu n'auras pas de problèmes. Je ne sais pas comment enlever les warning
    En définissant _CRT_SECURE_NO_WARNINGS comme l'indique le message.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Salut,

    Et la solution de la STL ça ne te convient pas ?

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <iostream>
    #include <fstream>
     
    using namespace std;
     
     
    int main()
    {
    	string line;
    	char sNum[10], sAttrib[32];
     
    	ifstream input("test.txt");
    	ofstream output("test2.txt");
     
    	while(input.good())
    	{
    		input.getline(sNum, 5);
    		input.getline(sAttrib, 6);
     
    		if(string(sAttrib) != "000000")
    			output << sNum << sAttrib << endl;
    	}
    	input.close();
    	output.close();
    	return 0;
    }

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo