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

  1. #1
    Candidat au Club
    Ouverture de fichier à noms variables C
    Bonjour,
    Je suis débutante en C et je rencontre un problème que je n'arrive pas a régler donc je me tourne vers vous:
    j'ai plusieurs fichiers que j'aimerais ouvrir en fonction de leur nom.
    GenericRouter_switch_2.mcf
    GenericRouter_switch_1.mcf

    Dans mon programme, j'ai une variable attr_name qui est un char* qui me renvoie "switch_1".
    J'ai donc fait:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FILE* fichier = NULL;
    std::string PathConf = "home/project/configurations/GenericRouter_" + attr_name +".mcf";
    fichier = fopen(PathConf.c_str(),"r");
    char ligne[TAILLE_MAX] = "";
    while(fgets(ligne,TAILLE_MAX,fichier) != NULL){ ... }


    L'erreur est la suivante:
    invalid operands of types ‘const char [70]’ and ‘char*’ to binary ‘operator+'
    Merci par avance pour vos réponses et votre aide!

  2. #2
    Expert éminent sénior
    Bonjour

    Déjà la syntaxe std::string est une syntaxe C++. Et Ici c'est le forum C. Or le C ce n'est pas du C++. Donc si tu as une question C++ tu auras avantage à la poser dans la section appropriée. Cela te donnera plus de chances qu'elle soit lue par des intervenants capables d'y répondre.

    Sinon pour ton souci (qu'on pourra retrouver en C), on ne peut pas concaténer des tableaux (des char[]) et des pointeurs (la syntaxe "....." te donne juste un pointeur contenant l'adresse de la chaine "....." stockée en mémoire). Ce pointeur équivaut à la string dans le sens où tu peux la traiter via des opérations classiques (compter sa longueur, copier, afficher) mais pas dans des opérations plus exotiques (utilisation d'un opérateur mathématique en espérant que le compilo comprendra qu'il s'agit d'une concaténation). Ca marcherait dans des langages plus puissants mais pas en C et visiblement pas en C++.

    La solution est
    1. créer un tableau de taille suffisante pour stocker le nom
    2. remplir ce tableau avec le nom


    Ce qui (en C) se traduirait par
    Code c :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    char PathConf[100];
    sprintf(PathConf, "home/project/configurations/GenericRouter_%s.mcf", attr_name);
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  3. #3
    Expert confirmé
    Bonjour,

    indiquer le langage utilisé (C ou C++) est important car la solution et les principes sont différents.
    En C++, il suffit de transformer le table de char en chaîne. La ligne 2 devient :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    std::string PathConf = "home/project/configurations/GenericRouter_" + std::string(attr_name) + ".mcf";