c++ - strcmp的两种场景

标签 c++ string

我必须编写一个有缺陷的服务器,它会因一个错误而崩溃。 我的疑问是为什么下面的代码会出现段错误

char wbuff[5];
char abuff[5]= "12345";
strcpy(wbuff,abuff);

但下面的代码没有

char buf[BUFSIZE];
char wbuf[5];
n = read(connfd, buf, BUFSIZE); // read input string from client
strcpy(wbuf,buf); // strlen(buf) is greater than 5

最佳答案

第一个从非空终止字符串(abuff)复制到另一个字符串。所以它离开 abuff 的末尾,直到它找到一个零字节,这可能是一种方式,并导致段错误。另一个从正确终止的字符串 (buf) 复制到尺寸过小的字符串 wbuf,并在复制 strlen(buf)+1 个字节后停止复制。所以第一个更有可能导致段错误,但两者都是错误。

关于c++ - strcmp的两种场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491231/

相关文章:

c++ - 为什么选择 BSTR 以及如何将其转换为 QString?

c++ - 是否为派生类生成移动构造函数/赋值运算符

java - com.fasterxml.jackson.core.JsonParseException : Unexpected character ('\' (code 92)) [Java]

regex - 为什么不能在 bash 正则表达式测试中使用字符串文字?

c# - String.Contains() : Multiple character - C#

string - 如何在 zsh 完成中删除文件扩展名?

c++ - 使用命名空间的全局变量

C++:对 map 的引用

c++ - 在 C++ 中的类头外部实现运算符重载

java - 创建单词对、三元组等以在 Bleu 中进行评估