这是一个相当基本的问题,我很确定我知道答案,但是看到错误的后果是我想我应该问的一个段错误。我已经以以下方式使用strlen()
和new char[]
操作符已经有一段时间了,只是注意到一些引发了危险信号的事情:
void genericCopy(char *somestring, char *someOtherString) {
someOtherString = new char[strlen(somestring)];
strcpy(someOtherString,somestring);
}
我的问题是,看到一个字符串应该是空终止的,我应该这样做:
void genericCopy(char *somestring, char *someOtherString) {
someOtherString = new char[strlen(somestring)+1];
strcpy(someOtherString,somestring);
someOtherString[strlen(someOtherString)] = '\0';
}
到目前为止,我从来没有遇到过第一种方法的问题,但这并不意味着我做得对。由于返回的长度是strlen()
字符串中没有空终止符的字符数,所以 new 没有为 '/0' 保留空间......至少我不认为它是。