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机器上运行它..它给我一个运行时错误“分段错误”。什么是这个错误..为什么它会给出这个错误..
谢谢..
答案 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)来简化代码。