在为mall *执行malloc之后,我的函数中出现了Segmentation错误

时间:2015-01-07 20:28:47

标签: c

就像我在标题中说的那样,我有这个问题。这是我的代码,我尝试使用printf函数检查停止编程的位置,并发现for循环导致该问题?谢谢任何建议!我想用这个函数将地址返回给char指针。

char *my_getline(int len)
{
  char *p = (char *) malloc(len); // I tried also without (char *), it's same thing.
  if ( p == NULL)
  return NULL;

  int d,c;
  for ( d = 0;d<len-1 && (c=getchar())!= EOF && c!= '\n';d++)
     *p++ = c;


  if ( c == '\n')
     {
        *p = '\0';
        return p;
     }
    else
        return NULL;


 }

编辑:提交的长度定义为100,并且不是那么大,因为当我输入一个字符时,程序会崩溃。

2 个答案:

答案 0 :(得分:4)

C中有一个函数fgets已经提供了你想要实现的目标。您的代码可以替换为:

char *p = (char *) malloc(len);
fgets(p, len, stdin);`

答案 1 :(得分:0)

正如 Lee Daniel Crocker 所评论的那样,你正在递增指针然后返回递增的值,你有两个选项,你可以返回p - d

char *my_getline(int len)
{
    char *p = malloc(len);
    int   d, c;
    if (p == NULL)
        return NULL;
    for (d = 0 ; d < len - 1 && (c = getchar()) != EOF && c!= '\n'; d++)
        *p++ = c;
    *p = '\0';

    return p - d;
}

你指向数据的开头,或者将开头存储在变量中并返回

char *my_getline(int len)
{
    char *p = malloc(len);
    char *ptr;
    int   d, c;
    if (p == NULL)
        return NULL;
    ptr = p;
    for (d = 0 ; d < len - 1 && (c = getchar()) != EOF && c!= '\n'; d++)
        *p++ = c;
    *p = '\0';

    return ptr;
}