c - fgets() 和 strcpy() 的问题

标签 c fgets strcpy

我正在编写一个 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/

相关文章:

c - 从文件中获取不带标点符号的字符串以进行拼写检查并输出原始标点符号。

c - 使用 fgets 和 sscanf 的意外重复

c - 使用 = 运算符时字符串数组出现意外结果

c++ - 存储 char 指针然后稍后填充它

c - 在二进制中,从有符号数转换为二进制补码。全部在 C 中

c++ - 免费(指针)方法的性能?

c++ - Mac 中的 OpenGL ARB 函数

c - fgets() 陷入无限循环

python - 在 C 中模仿 Python 的 strip() 函数

c++ - 获取本地系统日期时间并将其转换为字符串 (MFC C++)