改正代码: #define BUFFERSIZE 256 int ConcatString( char *buf1, char *buf2, size_t len1, size_t len2){ char buf[BUFFERSIZE]; if ( (len1 + len2 ) > BUFFERSIZE ) return(-1); memcpy( buf+len1, buf2, len2); ……… }
时间: 2024-03-17 21:42:50 浏览: 51
C语言实现基于数组的环形缓冲队列 ,通过图文简单介绍了缓存的写入和读出,并给出示例代码
以下是修改后的代码:
```c++
#define BUFFERSIZE 256
int ConcatString(char *buf1, char *buf2, size_t len1, size_t len2) {
if ((len1 + len2) >= BUFFERSIZE) { // 修正1: 应该是 >= 而不是 >
return -1;
}
char buf[BUFFERSIZE];
memcpy(buf, buf1, len1);
memcpy(buf + len1, buf2, len2);
buf[len1 + len2] = '\0'; // 修正2: 需要手动添加 '\0',以确保字符串以 '\0' 结尾
// ...
return 0;
}
```
修改的主要问题如下:
1. 缓冲区大小计算不正确,应该使用 `>=` 而不是 `>`,因为 `buf1` 和 `buf2` 的长度可能会等于 `BUFFERSIZE`。
2. 为了确保字符串以 `'\0'` 结尾,需要在拼接后手动添加 `'\0'`。修正后,增加了对最后一个字节的处理。
阅读全文