Проблема конкатенированной строки в C ++ - PullRequest
1 голос
/ 24 августа 2010

Почему следующий код не работает?

#include <iostream>
#include <string>
int main(){
    char filename[20];
    cout << "Type in the filename: ";
    cin >> filename;
    strcat(filename, '.txt');
    cout << filename;
}

Он должен объединять ". Txt" в конце введенного имени файла

Также, когдаЯ пытаюсь скомпилировать его (с g ++), это сообщение об ошибке

alt text

Ответы [ 3 ]

15 голосов
/ 24 августа 2010

Используйте двойные кавычки вместо одинарных.

strcat(filename, ".txt"); 

В C ++ одинарные кавычки обозначают символ single , двойные кавычки указывают последовательность символов (строка). Добавление L перед литералом указывает, что он использует широкий набор символов:

".txt"  // <--- ordinary string literal, type "array of const chars"
L".txt" // <--- wide string literal, type "array of const wchar_ts"
'a'     // <--- single ordinary character, type "char"
L'a'    // <--- single wide character, type "wchar_t"

Обычным строковым литералом обычно является ASCII, в то время как широкий строковый литерал обычно представляет собой некоторую форму кодировки Unicode (хотя язык C ++ не гарантирует этого - проверьте документацию компилятора).

В предупреждении компилятора упоминается int, поскольку стандарт C ++ (2.13.2 / 1) гласит, что символьные литералы, содержащие более одного char, на самом деле имеют тип int, который имеет значение, определенное реализацией.

Если вы используете C ++, лучше использовать std::string вместо этого, как Mark B предлагает:

#include <iostream> 
#include <string> 
int main(){ 
    std::string filename;
    std::cout << "Type in the filename: "; 
    std::cin >> filename; 
    filename += ".txt"; 
    std::cout << filename; 
} 
7 голосов
/ 24 августа 2010

" и ' означают разные вещи в C ++. Одинарная кавычка означает символ, а двойная кавычка означает C-строку. Вы должны использовать ".txt".

Однако, учитывая, что это C ++, вообще не используйте стиль C char[]: вместо этого используйте std::string:

#include <iostream>
#include <string>
int main(){
    std::string filename;
    cout << "Type in the filename: ";
    cin >> filename;
    filename += ".txt";
    cout << filename;
}
2 голосов
/ 24 августа 2010

Второй аргумент strcat использует строку (двойные кавычки). Вы используете одинарные кавычки (символ == целое число)

Ахмед

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