我有两个字符串,我想连接它们,所以,我使用了这段代码
char* a = "Hel";
char* b = "lo";
strcat(a,b);
,但是当我运行我的应用程序时它显示了这个错误Access violating writing location
5 回答
它们都是 (a
和b
) 字符串文字——你不能给它们写信。事实上,你根本不应该使用char *a = "Hel";
- 你应该使用char const *a = "Hel";
,在这种情况下代码甚至不会编译。
尝试这样的事情:
std::string a = "Hel";
std::string b = "lo";
std::string c = a + b;
strcat
在 C++ 中(即使使用正确)充其量是高度怀疑的。
a
指向一个无法修改的文字,除此之外,还strcat
需要目标中的空间来附加src
字符串。正如 Jerry 所提到的,您可以使用std::string
它使事情变得更简单。如果你需要使用,char *
那么你可以这样:
char str[20] ;
strcat( str, "Hel" ) ;
strcat( str, "lo" ) ;
虽然,没有一个老式的C
字符串方法真的很好用,除非你这样做只是为了学习。如果您打算大量使用它们,您应该至少阅读几篇关于C 和 C++ 中的安全编码的文章:C-Style Strings。
只是扩展杰里科芬所说的话。
非std::string
解决方案类似于:
char str[10];
strcpy(str,"Hel");
strcat(str,"lo");
不过std::string
一般比较好。
第一个声明使“a”成为指向四个内存字节的指针变量,其中包含字符“H”、“e”、“l”和字节 0。strcat 将“l”写入第四位,覆盖零字节,然后将'o'放入第四个字节之后的位置。内存中的那个地方不是你可以写的,所以你会得到一个错误。相反,请确保目的地有足够的空间来保存连接的字符串。如果可能,不要单独使用 strcat,而是使用更安全的东西,比如 strncat。
请参阅这些资源之一。
http://www.cplusplus.com/reference/cstring/strcat/
您应该尽可能多地使用 cplusplus.com 上的参考页面。
还有手册页: man strcat
如果您在 Unix 系统中,则来自 Unix 命令行,尽管它们可以在网上找到。