我正在编写一个返回字符串的第一个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。
答案 0 :(得分:5)
没有为substr
分配内存,因此该函数会对未初始化的指针进行处理,并且正在写入不应导致未定义行为的内存。它第一次运作的事实是完全的机会。
为substr
分配内存:
char* substr = malloc(n + 1); /* Plus one for null teminator. */
请注意substring()
的调用方必须free()
返回的缓冲区。
答案 1 :(得分:0)
您需要为子字符串函数中的char * substr分配内存。你现在正在破坏记忆,导致段错误。一个简单的: char * substr =(char *)malloc(sizeof(char)* n + 1); 应该做的。