为什么我的角色功能会崩溃?

时间:2014-11-03 05:13:18

标签: c string function return-value substr

我正在开发一个旨在创建执行不同操作的函数的项目,但是我在实现其中一个函数时遇到了麻烦。

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里面的代码显然不是最终的。我只是在测试任何东西时遇到了麻烦,而我却无法弄清楚如何返回一个值。)

1 个答案:

答案 0 :(得分:2)

strString内,您使用未初始化的指针test

char *b = test;   // oops

...

*test = *s1;      // oops

你可以从:

开始
char *test = NULL;

然后,当您找到子字符串时,可以更新test。在任何阶段,您都不想编写*test =,因为您没有修改任何输入字符串,也没有创建新字符串。您应该返回一个指针,该指针指向可以找到子字符串的点s1