【发布时间】:2020-06-13 19:45:48
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
char _getline(char *s)
{
char c;
s = (char *)malloc(sizeof(char));
int i;
for (i = 0; (s[i] = getchar()) != EOF && s[i] != '\n'; ++i)
{
s = (char *)realloc(s, (i + 1) * sizeof(char));
}
c = s[i];
s = (char *)realloc(s, (i + 1) * sizeof(char));
++i;
s[i] = '\0';
return c;
}
int main()
{
char *s = "word";
char c;
_getline(s);
printf("%s\n", s);
free(s);
return 0;
}
输出是:
input
word
munmap_chunk(): invalid pointer
Aborted (core dumped)
当我在 main 中做同样的事情时,我没有收到错误,但是当我尝试打印字符串时,我得到一个 \0。此外,当我尝试将指针的地址传递给_getline 时,我遇到了分段错误。这是尝试:
#include <stdio.h>
#include <stdlib.h>
char _getline(char **s)
{
char c;
*s = (char *)malloc(sizeof(char));
int i;
for (i = 0; (*s[i] = getchar()) != EOF && *s[i] != '\n'; ++i)
{
*s = (char *)realloc(*s, (i + 1) * sizeof(char));
}
c = *s[i];
*s = (char *)realloc(*s, (i + 1) * sizeof(char));
++i;
*s[i] = '\0';
return c;
}
int main()
{
char *s = "word";
char c;
_getline(&s);
printf("%s\n", s);
free(s);
return 0;
}
我做错了什么?
【问题讨论】: