strcpy 段错误将文件内容复制到数组

strcpy segfault copying file content to array

这是我的代码

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== Process terminating with default action of signal 11 (SIGSEGV)
==43177==  Access not within mapped region at address 0x4844000
==43177==    at 0x4838DC8: strcpy (vg_replace_strmem.c:512)
==43177==    by 0x109898: generateInvertedIndex (invertedIndex.c:102)
==43177==    by 0x1092B4: test1 (testInvertedIndex.c:36)
==43177==    by 0x109244: main (testInvertedIndex.c:23)

这是它从中复制的文件的内容

nasa.txt
news1.txt
file11.txt
mixed.txt
planets.txt
file21.txt
info31.txt

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

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

char *urls[MAX_WORD + 1];

所以这个电话

strcpy(urls[index], url);

调用未定义的行为。

看来您需要声明一个 two-dimensional 数组,例如

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 */;