我尝试连接两个字符串时出错

时间:2013-03-14 14:23:18

标签: c++

我有两个字符串,我想连接它们,所以,我使用了这个代码char* a = "Hel"; char* b = "lo"; strcat(a,b);但是当我运行我的应用程序时它显示了这个错误Access violating writing location

5 个答案:

答案 0 :(得分:11)

它们都是(ab)字符串文字 - 你不能写它们。实际上,您根本不应该使用char *a = "Hel"; - 您应该使用char const *a = "Hel";,在这种情况下代码甚至不会编译。

尝试这样的事情:

std::string a = "Hel";
std::string b = "lo";

std::string c = a + b;

strcat在C ++中(即使使用正确)充其量也是非常可疑的。

答案 1 :(得分:2)

a指向无法修改的文字,并且strcat需要在目标中添加src字符串的空间。正如Jerry所提到的,你可以使用std::string来简化事情。如果您需要使用char *,那么您可以这样:

char str[20] ;

strcat( str, "Hel" ) ;
strcat( str, "lo" ) ;

虽然旧的C样式字符串方法都不是很好用,除非你这样做只是为了学习。如果你要经常使用它们,你应该至少阅读Secure Coding in C and C++: C-Style Strings上的几篇文章。

答案 2 :(得分:1)

只是延伸Jerry Coffin说的话。

std::string解决方案类似于:

char str[10];
strcpy(str,"Hel");
strcat(str,"lo");

std::string通常更好。

答案 3 :(得分:1)

第一个声明使“a”指向一个指向四个字节内存的指针变量,字符为“H”,“e”,“l”和字节0. strcat将“l”写入第四位,超过零字节,然后'o'进入第四个字节后的位置。内存中的那个位置不是你写的,所以你得到一个错误。相反,请确保目标处有足够的空间来容纳连接的字符串。如果可能的话,不要单独使用strcat,而是更安全,比如strncat。

答案 4 :(得分:1)

请参阅其中一个资源。

http://www.cplusplus.com/reference/cstring/strcat/

您应尽可能使用cplusplus.com上的参考页。

如果您在Unix系统中,也可以从Unix命令行获取手册页man strcat,尽管可以在网上找到它们。

相关问题