11
votes

Erreur Nom du personnage universel incomplet \ u

J'essaie d'écrire un programme C ++ qui modifie un fichier .txt. Cependant, lorsque je l'exécute, je reçois une étrange erreur.

L'erreur: p>

6:20 C: \ dev-cpp \ homework6.CPP Nom de caractère universel incomplet \ u p> BlockQuote>

My Code: P>

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile ("C:\Users\My Name\Desktop\test\input.txt");
  if (myfile.is_open())
  {
    myfile << "This is a line.\n";
    myfile << "This is another line.\n";
    myfile.close();
  }
  else cout << "Unable to open file";
  return 0;
}


4 commentaires

Gah! Pourquoi en utilisant des espaces de noms std; ? * La facture va pour casser tous les manuels d'introduction C ++. (Not Anteater's Fault, chaque manuel en fait une raison pour une raison quelconque ...)


Je ne vois pas personnellement de problème avec à l'aide de l'espace de noms ... sauf dans les fichiers d'en-tête. OTOH, je vois un problème avec des conventions Windows-chemin plutôt que boost.org/doc/libs/1_44_0/libs/filesystem/v2/doc/index.htm


@Billy: Parce que c'est pratique. Surtout pour les petits programmes qui n'utilisent rien au-delà de la bibliothèque standard.


@Pigben: jusqu'à ce que le même débutant définit une fonction appelée copie et merveille pourquoi il ne compilera pas


6 Réponses :


26
votes

"c: \ utilisateurs \ mon nom \ dektop \ test \ input.txt"
La barre oblique backslash ( \ ) est un caractère spécial. Vous devez vous échapper:
"C: \\ Utilisateurs \\ Mon nom \\ Desktop \\ Test \\ INPUT.TXT" .

Edit: Alternais, utilisez des barres obliques vers l'avant ( / ). Windows s'en fiche.


1 commentaires

@Jaimecervantes: Étant donné que Mac ou Linux ne reconnaîtrait pas un chemin comme "C: / FOO / BAR" Je ne vois pas comment cela est pertinent.



3
votes

Vous devez utiliser des glashes doubles là-bas. Donc "c: \\ utilisateurs ... . Sinon, vous commencez une séquence d'évacuation (dans ce cas \ u pour un littéral unicode).


0 commentaires

2
votes

Vous devez échapper au \ avec un extra dans le nom du fichier. (C'est-à-dire que vous devez utiliser \\ )


0 commentaires

6
votes

Vous devez échapper à vos backslashes dans le nom de fichier. Dans les constantes de cordes C ++, le backslash est un caractère d'échappement qui ne représente pas elle-même. Pour obtenir une barre oblique inverse littérale, vous devez utiliser un double barre-back-backslash \\ .

\ u est le préfixe d'une séquence d'échappement Unicode 32 bits: vous utiliseriez quelque chose comme " \ u0010ffff " pour représenter un caractère unicode élevé. Le compilateur se plaint que \ utilisateurs ... n'est pas une séquence d'échappement unicode valide, car sers ... n'est pas un numéro hexadécimal valide.

Le correctif consiste à utiliser la chaîne "c: \\ utilisateurs \\ mon nom \\ bureau \\ test \\ INPUT.TXT" . .


3 commentaires

Eh bien, \ u signifie qu'en C ++ 0x uniquement. Dans la norme actuelle (C ++ 03), cela ne signifie rien. Et ce n'est valable que dans une chaîne de caractères Unicode. Étant donné que l'OP utilise DVCPP, qui est livré avec une version extrêmement ancienne de GCC, je doute qu'il prend en charge C ++ 0x.


Nous avons tous manqué l'occasion de le féliciter d'utiliser Unicode si tôt dans sa carrière de programmation.


Oups, je voulais dire Mingw pas GCC (mais Mingw est GCC en dessous)



2
votes

C'est exactement cas, mais, \ u n'est pas la même signification avec \ u . iOS accepte \ u et il se plaint de \ u


0 commentaires

0
votes

Cette erreur se produit même dans Visual Studio 2015 Même si le texte est dans commentaires de votre source C / C ++. Visual Studio n'est pas assez intelligent pour ignorer ce texte dans des commentaires, même si la commande indique quelque chose d'utile (par exemple dans le domaine du domaine \ utilisateur et si ce texte est littéralement attendu par exemple un fichier de configuration). Bizarre.


0 commentaires