c-strcpy segfault将文件内容复制到数组



这是我的代码

char url[MAX_WORD + 1];
char *urls[MAX_WORD + 1];
//char word[MAX_WORD + 1];
while(fscanf(fp, "%100s", url) == 1) {
strcpy(urls[index], url);
index++;
}

这就是我在valgrind上遇到的错误:

==43177==进程终止,信号11默认动作(SIGSEGV(===43177===访问不在地址0x4844000的映射区域内===43177===在0x4838DC8:strcpy(vg_replace_strmem.c:512(===43177===由0x109898生成invertedIndex(invertedIndex.c:102(===43177===通过0x1092B4:test1(testInvertedIndex.c:36(===43177===by0x109244:main(testInvertedIndex.c:23(

这是从复制的文件的内容

nasa.txtnews1.text文件11.txtmixed.txtplanets.txt文件21.txtinfo31.txt

我不知道我是怎么得到这个错误的。我只想将文件的内容复制到一个Url数组中。但它不起作用。

如果数组是在文件范围中声明的,那么您就有一个未初始化指针或空指针的数组

char *urls[MAX_WORD + 1];

所以这个调用

strcpy(urls[index], url);

调用未定义的行为。

看起来你需要的是声明一个二维数组,比如

char urls[MAX_WORD + 1][MAX_WORD + 1];

或者在原始数组中为存储的字符串动态分配内存。类似的东西

urls[index] = malloc( strlen( url ) + 1 );
if ( urls[index] != NULL ) strcpy(urls[index], url);
else /* some error processing */;

最新更新