我需要编写一个函数来复制字符串 C。 但我只记录最后一个值。需要您的帮助
我的代码:
char copyStr(const char* str)
{
char* newStr = new char(20);
for (; *str != '\0'; ++str)
{
*newStr = *str;
}
return *newStr;
delete newStr;
}
代码中的问题是代码返回一个字符,而不是指向它的指针。函数的返回类型表明该函数返回一个字符。因此,您需要将其签名修改为
char *copyStr(const char *str)
。
另一个问题是返回值取消引用指针
newStr
,使其在函数执行的最后返回newStr
指向的值。您需要返回 newStr
而不是 *newStr
。
另外,这可能不会影响函数的结果,但我想指出的一点是,
delete
语句后面的return
语句没有效果。而且,根据函数的描述,调用者将使用函数返回的C字符串。删除它就不可能了。
总之,修改后的代码版本将是这样的......
char* copyStr(const char* str)
{
char* newStr = new char(20);
for (; *str != '\0'; ++str)
{
*newStr = *str;
}
return newStr;
}
我还想建议让函数将
str
的长度作为附加输入,并根据长度动态分配内存空间 - 如果您假设输入字符串小于 20 个字节,则可以忽略它就其大小而言。
您返回的是单个字符。另外,如果您输入的 c 字符串长度超过 20 个字符,会发生什么情况?首先扫描长度,然后进行 malloc,或者将 malloc 固定长度设置为零(取决于操作系统)并在达到该长度之前中断循环。