C ++连接字符串问题

时间:2010-08-24 18:14:24

标签: c++ string concatenation

为什么以下代码不起作用?

#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 个答案:

答案 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第二个参数使用一个字符串(双引号)。您使用单引号(字符==整数)

艾哈迈德