自定义strcpy编译正常,但无法正常工作

时间:2014-03-05 03:05:19

标签: c string pointers char strcpy

我正在进行一项基本上是我们自己的C String类的C赋值。我的合作伙伴和我确信我们的逻辑正确并且我们的源文件正在编译,但是我们无法在简单的主文件上获得任何输出。

我们的strcpy如下:

...
char *my_strcpy(char *s1, const char *s2)
{
    int r=0;    
    for (int i=0;s2[i]!='\0'; i++)
    {
        s1[i]=s2[i];
        r++;
    }
    s1[r+1]='\0';
    return s1;  
}
...

至于我们的主文件:

...
const char *hello = "Hello World! ";
char pointer[1024];

my_strcpy(pointer, hello);
printf("%s\n", pointer);
...

任何帮助将不胜感激! 谢谢!

4 个答案:

答案 0 :(得分:2)

修订代码

char *my_strcpy(char *s1, const char *s2)
{
    int r=0;    
    for (int i=0;s2[i]!='\0'; i++)
    {
        s1[i]=s2[i];
        r++;
    }
    s1[r+1]='\0';
    return s1;  
}

修订答案

您不需要ri。您在s1[r+1] = '\0';处有一个错误的错误。

工作代码

纠正问题的原始版本和修订版本。

char *my_strcpy(char *s1, const char *s2)
{
    int i;    
    for (i = 0; s2[i] != '\0'; i++)
        s1[i] = s2[i];
    s1[i] = '\0';
    return s1; 
}

原始代码

char *my_strcpy(char *s1, const char *s2)
{
    int r=0;    
    for (int i=0;*s2[i]!='\0'; i++)
    {
        *s1[i]=*s2[i];
        r++;
    }
    *s1[r+1]='\0';
    return *s1; 
}

原始答案

如果没有大量警告,代码不应该编译(实际上,它们应该是错误)。

在整个代码中,符号:

*s1[i]

取消引用一个字符,好像它是一个字符指针。

你在*s[r+1] = '\0';

中也是'一个接一个'

您将char作为char *返回。

您实际上并不需要ir

答案 1 :(得分:2)

您的密码存在许多错误:

编译错误:

  1. my_strcpy需要返回一个char:char *的指针,但是你返回一个char。
  2. 逻辑错误:

    1. s2[i]!='\0'是对的
    2. 所以你的代码可能如下所示:

      char *my_strcpy(char *s1, const char *s2)
      {
          int r=0;    
          for (int i=0;s2[i]!='\0'; i++)
          {
              s1[i]=s2[i];
              r++;
          }
          s1[r]='\0';
          return s1; 
      }
      

      我认为你不熟悉C中的指针。

答案 2 :(得分:1)

你要返回* s1,它应该是s1,因为你需要返回一个指针。

答案 3 :(得分:0)

首先,编码错误,你在for循环中定义int i = 0。在您在函数中执行任何其他操作之前,应先定义所有变量。

其次,你要复制你的最后一个字符,即'r'处的空字符。你的循环递增r直到你找到一个空字符为什么你想在你找到它之后将空字符放在一个地方?将其更改为s1 [r] ='\ 0';

我注意到你的my_strcpy函数的一件事是你正在返回s1但是当你调用my_strcpy时,你没有将返回值赋给指针。这很好,因为你的第一个参数是一个“输出”,因为你传入一个指针。我会让my_strcpy返回void并摆脱返回s1;一起排队。

总之,my_strcpy看起来像这样

void my_strcpy(char *s1, const char *s2)
{
    int r = 0;
    int i = 0;
    for (i = 0; s2[i] != '\0'; i++)
    {
        s1[i] = s2[i];
        r++;
    }
    s1[r] = '\0';
}