3

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

4

5 回答 5

11

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

尝试这样的事情:

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

std::string c = a + b;

strcat在 C++ 中(即使使用正确)充其量是高度怀疑的。

于 2013-03-14T14:24:54.683 回答
2

a指向一个无法修改的文字,除此之外,还strcat需要目标中的空间来附加src字符串。正如 Jerry 所提到的,您可以使用std::string它使事情变得更简单。如果你需要使用,char *那么你可以这样:

char str[20] ;

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

虽然,没有一个老式的C字符串方法真的很好用,除非你这样做只是为了学习。如果您打算大量使用它们,您应该至少阅读几篇关于C 和 C++ 中的安全编码的文章:C-Style Strings

于 2013-03-14T14:25:39.950 回答
1

只是扩展杰里科芬所说的话。

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

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

不过std::string一般比较好。

于 2013-03-14T14:28:01.023 回答
1

第一个声明使“a”成为指向四个内存字节的指针变量,其中包含字符“H”、“e”、“l”和字节 0。strcat 将“l”写入第四位,覆盖零字节,然后将'o'放入第四个字节之后的位置。内存中的那个地方不是你可以写的,所以你会得到一个错误。相反,请确保目的地有足够的空间来保存连接的字符串。如果可能,不要单独使用 strcat,而是使用更安全的东西,比如 strncat。

于 2013-03-14T14:29:31.727 回答
1

请参阅这些资源之一。

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

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

还有手册页: man strcat如果您在 Unix 系统中,则来自 Unix 命令行,尽管它们可以在网上找到。

于 2013-03-14T14:29:56.373 回答