将一个 C 字符串复制到另一个 C 字符串无法正常工作

问题描述 投票:0回答:2

我需要编写一个函数来复制字符串 C。 但我只记录最后一个值。需要您的帮助

我的代码:

char copyStr(const char* str)
{
  char* newStr =  new char(20);
  for (; *str != '\0'; ++str)
  {
    *newStr = *str;
  }

  return *newStr;
  delete newStr;
 }
c char
2个回答
0
投票

代码中的问题是代码返回一个字符,而不是指向它的指针。函数的返回类型表明该函数返回一个字符。因此,您需要将其签名修改为

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 个字节,则可以忽略它就其大小而言。


0
投票

您返回的是单个字符。另外,如果您输入的 c 字符串长度超过 20 个字符,会发生什么情况?首先扫描长度,然后进行 malloc,或者将 malloc 固定长度设置为零(取决于操作系统)并在达到该长度之前中断循环。

© www.soinside.com 2019 - 2024. All rights reserved.