devc++strlen
时间: 2023-08-18 14:05:44 浏览: 125
在DevC++中,strlen()是一个函数,用于计算指定字符串的长度,但不包括结束字符(即'\0'字符)。它的原型如下所示:
size_t strlen(const char* str);
在你提供的代码中,sprintf_s()函数的第一个参数使用了strlen(tmp) + 1,这是错误的。应该使用m_len + strlen(p) + 1,因为你想要将p追加到m_pbuf后面。这个错误导致了内存越界的问题,因为sprintf_s()函数会尝试将字符串写入超出分配给tmp的内存范围。
为了解决这个问题,你应该将sprintf_s()函数的第一个参数改为m_len + strlen(p) + 1,以确保分配足够的内存来存储新的字符串。
正确的代码应该是这样的:
const char* MyString::append(const char* p) {
if (p != NULL) {
char* tmp = new char\[m_len + strlen(p) + 1\];
sprintf_s(tmp, m_len + strlen(p) + 1, "%s%s", m_pbuf, p);
m_pbuf = tmp;
m_len = strlen(m_pbuf);
}
return m_pbuf;
}
这样就能正确地将字符串追加到m_pbuf后面了。
#### 引用[.reference_title]
- *1* *2* [记一次C++中关于strlen()的错误](https://blog.csdn.net/weixin_39722372/article/details/88622300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [密码学 用dev c++](https://blog.csdn.net/m0_58749366/article/details/117718285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文