如何从/lib/libc.so.1修复strcpy()中的#0 0xfeea5b41

时间:2015-09-21 15:21:33

标签: c file-handling

我想读取一个文件并将其存储在列表中。我这样做但是当我使用gdb时我得到了这个错误:

#0  0xfeea5b41 in strcpy () from /lib/libc.so.1.

以下是代码:

int
main (int argc, char *argv[])
{
  /*declare and initialise variable */
  char array[10][150], buffer[150];
  //message =(char*)malloc(sizeof(char));
  int i = 0;
  FILE *fp;
  fp = fopen (argv[1], "r");
  if (fp == 0)
    {
      fprintf (stderr, "Input not valid\n");
      exit (1);
    }
  /*stores and prints the data from the string */
  int counter = 0;
  while (fgets (buffer, 150, fp))
    {
      strcpy (array[i], buffer);
      //printf(" %s",message[i]);
      i++;
      counter++;
    }
  fclose (fp);
  return 0;
}

1 个答案:

答案 0 :(得分:0)

这里有几个问题。

  1. 如果超过10行,您将超出arraystrcpy将尝试复制到无效的位置。我希望这是这个bug的原因。

  2. fopen在出错时返回指针(NULL),而不是0。

  3. 您没有检查fgets的返回值;它会在出错时返回NULL

  4. 增加counteri似乎是多余的,因为它们都具有相同的值。

  5. 您没有#include相关的包含文件,因此您的C编译器不会选择正确的函数原型。您需要:#include <stdio.h>#include <stdlib.h>#include <string.h>。您可以通过使用gcc -Wall进行编译来解决此问题。