我正在尝试在C++中编写自己的strcat函数,但是它有一些问题。
我的输入是两个字符c和a,我的函数将返回一个指向连接了c和a的字符的字符指针。
我的输入是两个字符c和a,我的函数将返回一个指向连接了c和a的字符的字符指针。
例如,
输入:'abc' 'xyz'
期望输出:'xyzabc'
我的函数的输出:'xyza@▲∩'
我的函数返回了一些与我的输入不同的特殊字符。
我调试了我的函数并发现:
当i=0时,destination[3]
= source[0]
= 'a'
。
但是当i=1时,destination[8]
= source[1]
= 'b'
。
而当i=2时,destination[9]
= source[2]
= 'c'
。
最后,destination[10]
= '\0'
。#include<iostream>
#include<string.h>
using namespace std;
char* mystrcat ( char * destination, const char *source){
for (int i=0; i<strlen(source); i++) {
destination[strlen(destination)+i] = source[i];
}
destination[strlen(destination)+strlen(source)]='\0';
return destination;
}
int main() {
char c[100];
cin.getline(c, 99);
char a[100];
cin.getline(a,99);
mystrcat(a,c);
cout<<a;
return 0;
}
strlen(destination)
的值是多少? - undefineddestinationSize
的参数,该参数表示目标缓冲区中可以存储的最大字符数,以防止缓冲区溢出。一目了然:如果a
是99个字符,c
是99个字符,那么哪个字符数组有足够的空间来存储198个字符的结果? - undefinedstrncat
而不是strcat
,后者会快乐地溢出缓冲区。 - undefinedchar a[200]
,我就不会提到它,因为根据代码的其他细节,strcat将保证有足够的空间。需要发生三件事之一:要么使用strncat,要么将目标缓冲区变大,要么将getline字符的总和限制在目标缓冲区的大小之内(加上一个NUL字符)。 - undefined