-1

我正在编写一个返回字符串的前n( n <= strlen(src)) 个字符的函数。

char* substring(char *src, int n)
{
   char *substr;
   int i;
   for (i = 0; i < n; i++)
     *substr++ = *src++;
   src = src - n;
   *substr = '\0';
   return substr - n;
}

此函数仅在调用一次时返回正确答案,但在多次调用时返回 Seg Fault。

4

2 回答 2

5

没有为其分配内存,substr因此该函数引用了一个未初始化的指针,并且正在写入不应该导致未定义行为的内存。它第一次起作用的事实是完全的机会。

为 分配内存substr

char* substr = malloc(n + 1); /* Plus one for null teminator. */

请注意,调用者substring()必须free()返回缓冲区。

于 2012-04-08T12:01:14.723 回答
0

您需要在 substring 函数中为 char *substr 分配内存。您目前正在破坏内存,这导致了段错误。一个简单的: char *substr = (char *)malloc(sizeof(char)*n+1); 应该做的伎俩。

于 2012-04-08T12:05:42.287 回答