为什么以下代码不起作用?
#include <iostream>
#include <string>
int main(){
char filename[20];
cout << "Type in the filename: ";
cin >> filename;
strcat(filename, '.txt');
cout << filename;
}
它应该在输入任何文件名的末尾连接“。txt”
此外,当我尝试编译它(使用g ++)时,这是错误消息
答案 0 :(得分:15)
使用双引号而不是单引号。
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;
}
答案 1 :(得分:7)
"
和'
在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 :(得分:2)
strcat第二个参数使用一个字符串(双引号)。您使用单引号(字符==整数)
艾哈迈德