Problème de compilation

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je ne comprends pas pourquoi le code ci-dessous ne compile pas :

#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;


int main(int argc, char* argv[])
{
    string my_str = argv[0] + "/test";
    cout << my_str << endl;
    
    return 0;
}

_test.cpp:10:26: error: invalid operands of types ‘char*’ and ‘const char [6]’ to binary ‘operator+’

Pour moi, la chaîne "/test" devrait être de type const char* non ?

Lu’!

Pour moi, la chaîne "/test" devrait être de type const char* non ?

Green

Alors non, elle est bien de type tableau de caractères. Mais même si elle était de type char*, ça ne changerait rien, on ne peut pas concaténer des chaînes "à la C" avec l’opérateur +.

Ici, il faut que tu convertisses au moins l’un des deux chaînes en std::string. Une manière facile est d’importer les litérales pour les strings (using namespace std::literals::string_literals) et de changer ta chaîne test en une string:

string my_str = argv[0] + "/test"s ;

Je suis finalement passé par une autre méthode en convertissant de force en string :

#include <iostream>
#include <string>
#include <fstream>

using std::cout;
using std::endl;
using std::string;
using std::ifstream;


int main(int argc, char* argv[])
{
    ifstream monfichier (argv[1] + (string)".pin");
    
    if (monfichier.is_open())
    {
        cout << "ok" << endl;
        monfichier.close();
    }
    
    cout << "end" << endl;
    
    return 0;
}

C’est mieux ?

Quelle différence entre char[] et char* ? Pour moi, les deux sont strictement équivalents.

Green

Non ce sont deux types bien différents. Le pointeur n’est qu’une adresse mémoire alors que le tableau est une zone contigue d’éléments du même type.

La confusion vient du fait qu’un tableau se comporte comme un pointeur sur son premier élément.

https://zestedesavoir.com/tutoriels/2787/la-verite-sur-les-tableaux-et-pointeurs-en-c/

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte