Ошибка неполного универсального имени символа \ U - PullRequest
6 голосов
/ 03 ноября 2010

Я пытаюсь написать программу на C ++, которая изменяет TXT-файл. Однако, когда я запускаю его, я получаю странную ошибку.

Ошибка:

6: 20 C: \ Dev-Cpp \ Homework6.cpp неполное универсальное имя персонажа \ U

Мой код:

#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;
}

Что я делаю не так?

Ответы [ 6 ]

21 голосов
/ 03 ноября 2010

"C:\Users\My Name\Desktop\test\input.txt"
Обратная косая черта (\) является специальным символом.Вы должны избежать этого:
"C:\\Users\\My Name\\Desktop\\test\\input.txt".

РЕДАКТИРОВАТЬ: В качестве альтернативы, используйте косую черту (/).Windows не волнует.

6 голосов
/ 03 ноября 2010

Вам необходимо избежать обратной косой черты в имени файла.В строковых константах C ++ обратная косая черта является escape-символом, который не представляет себя.Чтобы получить буквальную обратную косую черту, вам нужно использовать двойную обратную косую черту \\.

\U - это префикс 32-битной escape-последовательности Unicode: вы должны использовать что-то вроде "\U0010FFFF" дляпредставляют высокий символ Unicode.Компилятор жалуется, что \Users... не является допустимой escape-последовательностью Юникода, поскольку sers... не является допустимым шестнадцатеричным числом.

Исправление заключается в использовании строки "C:\\Users\\My Name\\Desktop\\test\\input.txt".

3 голосов
/ 03 ноября 2010

Вам нужно использовать двойные обратные слеши там.Так что "C:\\Users....В противном случае вы запускаете escape-последовательность (в этом случае \ U для литерала Юникода).

2 голосов
/ 26 декабря 2014

это точный случай, но, \U не то же самое, что и \u. iOS принимает \u и жалуется на \U

2 голосов
/ 03 ноября 2010

Вам нужно экранировать \ с дополнительным \ в имени файла. (т.е. вам нужно использовать \\)

0 голосов
/ 20 марта 2017

Эта ошибка возникает даже в Visual Studio 2015, даже если текст находится в комментариях вашего источника C / C ++.Visual Studio недостаточно умен, чтобы игнорировать этот текст в комментариях, даже если команда говорит что-то полезное (например, в слове domain \ user и если этот текст буквально ожидается, например, в файле конфигурации).Weird.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...