use*_*777 -1 c segmentation-fault
我正在编写一个返回字符串的first 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;
}
Run Code Online (Sandbox Code Playgroud)
此函数仅在调用一次时返回正确的答案,但在多次调用时返回Seg Fault.
没有分配内存substr,因此函数会对未初始化的指针进行处理,并且正在写入不应该导致未定义行为的内存.它第一次工作的事实是完全的机会.
为substr以下内容分配内存:
char* substr = malloc(n + 1); /* Plus one for null teminator. */
Run Code Online (Sandbox Code Playgroud)
请注意,调用者substring()必须free()返回缓冲区.