我想读取一个文件并将其存储在列表中。我这样做但是当我使用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;
}
答案 0 :(得分:0)
这里有几个问题。
如果超过10行,您将超出array
,strcpy
将尝试复制到无效的位置。我希望这是这个bug的原因。
fopen
在出错时返回指针(NULL
),而不是0。
您没有检查fgets
的返回值;它会在出错时返回NULL
。
增加counter
和i
似乎是多余的,因为它们都具有相同的值。
您没有#include
相关的包含文件,因此您的C编译器不会选择正确的函数原型。您需要:#include <stdio.h>
,#include <stdlib.h>
和#include <string.h>
。您可以通过使用gcc -Wall
进行编译来解决此问题。