我正在开发一个旨在创建执行不同操作的函数的项目,但是我在实现其中一个函数时遇到了麻烦。
int main()
{
char str1[30] = "Hello";
char str2[30] = "Goodbye old friend";
char str3[30];
char *p = strCopy(str3, "Annie");
printf("(Annie) %s\n", p);
p = strString(str3, "nn");
printf("(nnie) %s\n", p);
strCopy(str3, "HeloHellooo");
p = strString(str3, "ello");
printf("(ellooo) %s\n", p);
return 0;
}
char *strCopy(char *s1, const char *s2)
{
char *b = s1;
while (*s2!='\0')
{
*s1 = *s2;
s1++;
s2++;
}
*s1 = '\0';
return b;
}
char *strString(const char *s1, const char *s2) // returns a string that starts with the characters in *s2. For example: char *strString ("Annie", "nn") should return "nnie".)
{
char *test;
char *b = test;
while (*s1 != '\0' && *s2 != '\0')
{
if (*s1 == *s2)
{
*test = *s1;
}
s1++;
s2++;
}
*test = '\0';
return b;
}
当常量整数是唯一的两个参数时,我无法弄清楚如何在 char * strString 中返回值。当我尝试时,程序崩溃了。请记住,main()中的参数,函数声明和内容必须与它们的编写完全一致。这是作为项目的一部分给我的代码。我只能操纵函数内部的内容。我也不允许在任何函数中使用数组。
(* strString里面的代码显然不是最终的。我只是在测试任何东西时遇到了麻烦,而我却无法弄清楚如何返回一个值。)
答案 0 :(得分:2)
在strString
内,您使用未初始化的指针test
:
char *b = test; // oops
...
*test = *s1; // oops
你可以从:
开始char *test = NULL;
然后,当您找到子字符串时,可以更新test
。在任何阶段,您都不想编写*test =
,因为您没有修改任何输入字符串,也没有创建新字符串。您应该返回一个指针,该指针指向可以找到子字符串的点s1
。