斯特伦有副作用吗
Does strlen have any side effect?
本文关键字:副作用 更新时间:2023-10-16
我知道,或者更确切地说,strlen()是一个相当简单的函数,但由于某种原因,当我想在我的一个函数中使用它时,它会损坏程序。我不知道为什么会发生这种情况,因为strlen的结果是正确的,但如果包含strlen,整个程序就无法工作。具体地说,这部分代码造成了麻烦:
int random1 = strlen(objectNameValue);
int random2 = strlen(PA_type_value);
int random3 = strlen(attributeValue);
printf("length of objectNameValue: %d, PA_type_value: %d, attributeValue: %d", random1, random2, random3);
我的程序实际上是一个简单的LDAP服务器,我试图发送一些数据——例如,当我把这部分代码放在注释中时,这些变量(attributeValue),它可以完美地工作。但如果我把它放在那里,发送的数据是不正确的,我真的不知道strlen会如何影响它们。有趣的是,strlen实际上打印的是正确的结果。
为了进一步指定,strlen中的这三个变量都是char[]类型,并且末尾都有/0。有人能帮忙吗?
因此,在评论中提出请求后,下面是一个更详细的了解:基本上,以非常微小的方式,这就是我正在做的事情:
char message_out[1024];
bzero(message_out, 1024);
char objectNameValue[1024];
strcpy(objectNameValue,"cn=");
char PA_type_value[5] = {'u', 'i', 'd'};
strcat(Message_out, objectNameValue);
strcat(Message_out, PA_type_value);
但有时我不会把固定的字符放入字符串中,而是另一个字符串。,我需要知道这个字符串有多大,因为我需要计算message_out的总长度。我总是注意字符串,要足够大,要用零初始化。
输出是这样的:
对象长度NameValue:12,PA_type_value:3,attributeValue:8
问题可能在于strlen
如何查找长度。strlen
遍历一个字符数组的所有字符,直到找到一个终端\0字符。如果数组没有这个终端字符,那么实现可能会超出您给它的字符数组的内存边界,并导致未定义的行为。
相关文章:
- 复制构造函数的奇怪副作用
- 程序只适用于包含(无副作用)cout声明
- 为什么评估一个表达可能会产生副作用
- strncmp 有副作用吗?
- 具有必要副作用的静态初始化被优化掉了
- 使用运营商New分配的数据结构是否有任何副作用
- 操作员的排序规则和副作用
- 如果 LTO 中的代码依赖于其构造的副作用,是否允许 LTO 删除未使用的全局对象?
- 默认参数中的 c++ new 运算符及其副作用
- 使用 gcc 的 -fno-math-errno 可能有什么副作用?
- 返回对象的攻击子具有副作用
- 初始化类模板的静态成员会产生副作用
- 斯特伦有副作用吗
- 警告表达副作用
- min()函数的副作用
- C++按引用传递和按值函数传递副作用
- 成员子对象继承存储持续时间是否有任何非直观的副作用
- 为什么libcurl需要"CURLOPT_NOSIGNAL"选项,启用后会有什么副作用
- 返回值和副作用编码之间有什么区别
- 可以删除的一元谓词具有副作用