Используйте двойные кавычки вместо одиночных кавычек.
strcat(filename, ".txt");
В C++, одиночные кавычки обозначают одного характер, двойные кавычки обозначают последовательности символов (строка). Добавляя в 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;
}
Многие люди говорят, чтобы использовать 'зЬй :: strings' вместо символьных массивов. В дополнение к тому, что 'std :: strings' проще в использовании благодаря встроенной поддержке таких вещей, как конкатенация, они также более безопасны в использовании, так как легко вводить (использовать) ошибки при использовании массивов символов. Например, что, если пользователь вводит имя файла длиной более 19 (1 символ используется для символов с нулевым терминатором)? – Brian