基本上我要做的就是重新制作自己的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;
}
答案 0 :(得分:4)
您没有第一个和第二个变量的定义(在此处使用:)
first++;
second++;
您必须在函数char* first = /*Whatever*/, *second = /*Whatever*/
的开头添加mystrcmp
。
但我认为你真的犯了一个错误而你想写
s1++;
s2++;
而不是上面的代码段(并且在同一个功能中)
答案 1 :(得分:1)
此代码存在一些问题。
mystrcmp
const
以防止意外修改并允许传递字符串文字。first
。second
。 mystrcpy
s1
中,以便可以返回。 mystrcat
p1 + p2
,并且不会访问或修改它们指向的数据。以下是完成家庭作业编译所需的修改。除了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;
}