我正在编写一个 C 程序,它首先打开并读取一个包含 50 个电影片名的文件,每个片名都写在一行上。接下来,我试图将文件的每一行(或电影标题)分配到名为 FilmArray[51] 的数组的每个元素中。我正在使用 strcpy() 来执行此操作,但程序每次到达 strcpy 的第一个循环时都会崩溃,而且我似乎无法弄清楚哪里出了问题......
int main()
{
int i=0;
char array[51];
char FilmArray[51];
bool answer;
FILE *films;
films = fopen("filmtitles.txt", "r");
if(films == NULL){
printf("\n ************* ERROR *************\n");
printf("\n \"filmtitles.txt\" cannot be opened.\n");
printf("\n PROGRAM TERMINATED\n");
exit(EXIT_FAILURE);
}
while(fgets(array, sizeof array, films) != NULL){
printf("%d. %s",i, array);
strcpy(FilmArray[i], array);
i++;
}
最佳答案
FilmArray
是一个字符数组,而不是一个字符串数组。
所以当你在做的时候
strcpy(FilmArray[i], array);
编译器会将 FilmArray[i]
中的值转换为指针,并将其用作字符串的目标。这将导致 undefined behavior .
事实上,编译器应该为此向您发出警告,如果没有,则您需要启用更多警告,因为警告是有关编译器认为可疑并可能导致 UB 的消息。
关于c - fgets() 和 strcpy() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844456/