编译错误我不知道如何解决

时间:2013-07-03 21:24:32

标签: c++

基本上我要做的就是重新制作自己的c-string。 strlen,strcmp,strcpy和strcat。 下面的代码在我的头文件中:

int mystrlen(const char pcString[]) //strlen function
{
   const char *pcStringEnd = pcString;

   while (*pcStringEnd != '\0')
      pcStringEnd++;

   return pcStringEnd - pcString;
}

int mystrcmp(char *s1, char *s2) // strcmp function
{
  while(*s1 == *s2)
  {
    if(*s1 == '\0' || *s2 == '\0')
      break;

    first++;
    second++;
  }

  if(*first == '\0' && *second == '\0')
    return (0);
  else
    return (-1);
}

char mystrcpy(char *s1, const char *s2) // strcpy function
{
  while(*s2)
  {
    *s1 = *s2;
    s2++;
    s1++;
  }

 *s1 = '\0';
}

char mystrcat(char *s1, const char *s2) //strcat function
{
  char *string1 = s1;
  const char *string2 = s2;
  char *catString = string1 + string2;
  return catString;
}

大多数错误都是未定义的标识符,但问题是我无法更改main.cpp中的内容。只能修改头文件。我会将main.cpp放在这里,但它的代码很长。

{
 char *string1 = s1;
 const char *string2 = s2;
 char *catString = string1 + string2; //There is an error here with string 2 and catring.
 return catString;
}

2 个答案:

答案 0 :(得分:4)

您没有第一个和第二个变量的定义(在此处使用:)

first++;
second++;

您必须在函数char* first = /*Whatever*/, *second = /*Whatever*/的开头添加mystrcmp

但我认为你真的犯了一个错误而你想写

s1++;
s2++;

而不是上面的代码段(并且在同一个功能中)

答案 1 :(得分:1)

此代码存在一些问题。

mystrcmp

  1. 参数确实应该是const以防止意外修改并允许传递字符串文字。
  2. 未声明变量first
  3. 未声明变量second
  4. mystrcpy

    1. 如果您尝试匹配标准库中的函数,则返回类型应为指针。
    2. 您需要将值保存在s1中,以便可以返回。
    3. 您错过了退货声明。
    4. mystrcat

      1. 如果您尝试匹配标准库中的函数,则返回类型应为指针。
      2. 功能的主体是完全错误的。添加两个指针值并不像您期望的那样工作。它会导致指针值为p1 + p2,并且不会访问或修改它们指向的数据。
      3. 以下是完成家庭作业编译所需的修改。除了mystrcat之外,我没有测试过它或改变了很多逻辑。我还包括了上面列出的注释中的评论。

        int mystrlen(const char *pcString) //strlen function
        {
            const char *pcStringEnd = pcString;
        
            while (*pcStringEnd != '\0')
                pcStringEnd++;
        
            return pcStringEnd - pcString;
        }
        
        // added const to parameters
        // changed first to s1
        // changed second to s2
        int mystrcmp(const char *s1, const char *s2) // strcmp function
        {
            while(*s1 == *s2)
            {
                if(*s1 == '\0' || *s2 == '\0')
                    break;
        
                s1++;
                s2++;
            }
        
            if(*s1 == '\0' && *s2 == '\0')
                return (0);
            else
                return (-1);
        }
        
        // changed return type to a pointer
        // added variable to save start of s1
        // added return statement
        char* mystrcpy(char *s1, const char *s2) // strcpy function
        {
            char *start = s1;
        
            while(*s2)
            {
                *s1 = *s2;
                s2++;
                s1++;
            }
        
            *s1 = '\0';
        
            return start;
        }
        
        // changed return type
        // replaced entire function body
        char *mystrcat(char *s1, const char *s2) //strcat function
        {
            mystrcpy(s1 + mystrlen(s1), s2);
            return s1;
        }