在给定的文本中找到子字符串.. C程序

时间:2010-05-05 05:52:56

标签: c

char *substring(char *text, int position, int length)
{
   int i, j=0;
   char *temp ;

   for(i=position-1; i<position+length-1; i++)
   {
     temp[j++] = text[i];
   }
   temp[j] = '\0';

   return temp;
}

嗨以下代码中的错误是什么..我试图在Fedora机器上运行它..它给我一个运行时错误“分段错误”。什么是这个错误..为什么它会给出这个错误..

谢谢..

6 个答案:

答案 0 :(得分:6)

temp未初始化。

答案 1 :(得分:3)

您需要为temp分配内存 - 目前它只是dangling pointer。您可以使用malloc,但请注意,调用者需要确保此存储随后为free d。

例如:

char *substring(const char *text, int position, int length)
{
   char *temp = malloc(length + 1);
   int i, j;

   for (i = position, j = 0; i < position + length; i++, j++)
   {
       temp[j] = text[i];
   }
   temp[j] = '\0';

   return temp;
}

答案 2 :(得分:2)

这意味着您的代码违反了操作系统设置的某些限制,在这种情况下,您正在写入您无权写入的内存。

这是因为您的temp变量只是一个未初始化的指针,它不包含允许您写入的内存地址。

如果您希望写入length + 1个字符,那么它必须指向至少那么多字节的空间。

由于您希望返回字符串,您需要将其设为static(但这可能很危险),或者动态分配空间:

if((temp = malloc(length + 1)) == NULL)
  return NULL;

答案 3 :(得分:0)

虽然答案很明显 - 即temp未初始化, 这是一个建议。

如果您打算在另一个字符串中找到子字符串, 很少有选择,

1. use C strstr(...)
2. Robin-Karp method
3. Knuth-Morris-Pratt method
4. Boyer Moore method

Update: 最初,我认为这个问题与查找子字符串(基于标题)有关。 无论如何,这看起来像strchr()实现。

答案 4 :(得分:0)

我正在将子字符串的副本复制到另一个指针中,这只是查找给定字符串的一个子字符串的简单方法..

希望我以正确的方式非常简单。

另外,SysAdmin给出的方法看起来相当复杂,但仍然不是建议的..我会尝试学习那些..但是如果你能告诉我是否已经实现了非常基本的模式搜索算法正确,那就太好了..

谢谢..

答案 5 :(得分:0)

从代码中很明显,你错过了分配/初始化指针* temp。它指向无处。

您必须使用malloc或strdup并完成剩下的工作。但是,您可能还想探索使用strncpy(null terminate)来简化代码。