我有两个字符串,我想连接它们,所以,我使用了这个代码char* a = "Hel";
char* b = "lo";
strcat(a,b);
但是当我运行我的应用程序时它显示了这个错误Access violating writing location
答案 0 :(得分:11)
它们都是(a
和b
)字符串文字 - 你不能写它们。实际上,您根本不应该使用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
,尽管可以在网上找到它们。