C 检测到堆栈崩溃,但字符数组在限制范围内

C 检测到堆栈崩溃,但字符数组在限制范围内,c,stack-smash,C,Stack Smash,我试图理解我做错了什么。来自键盘的输入在字符数组限制内。。。 即使输入长度为8个字符,也会抛出一个错误。只要字符长度为6个字符,它就可以正常工作 这是我的代码(我可以发誓它一直工作到1小时前) #包括 #包括 #包括 #包括 #包括“functions.h” #定义SLEN 81 #定义文件名“./database.txt” void add_成员(字符*名称); 内部主(空) { 字符名称[SLEN],姓氏[SLEN],地址[SLEN]; 未签名的整数日期、开始日期、结束日期; 添加_成

我试图理解我做错了什么。来自键盘的输入在字符数组限制内。。。 即使输入长度为8个字符,也会抛出一个错误。只要字符长度为6个字符,它就可以正常工作

这是我的代码(我可以发誓它一直工作到1小时前)

#包括
#包括
#包括
#包括
#包括“functions.h”
#定义SLEN 81
#定义文件名“./database.txt”
void add_成员(字符*名称);
内部主(空)
{   
字符名称[SLEN],姓氏[SLEN],地址[SLEN];
未签名的整数日期、开始日期、结束日期;
添加_成员(&name[SLEN]);
返回0;
}
void add_成员(字符*名称)
{   
文件*文件;
if((file=fopen(file_NAME,“a”))==NULL)
{
printf(“无法打开文件%s\n”,文件名);
退出(退出失败);
}
fputs(“插入名字:”,标准输出);
fgets(name,SLEN,stdin);//问题似乎出现在这里
check_string(name);//这是在另一个文件中定义的
FPUT(名称、文件);
printf(“添加到数据库的名称:%s\n”,名称);
如果(fclose(文件)!=0)
printf(“关闭文件%s\n时出错”,文件名);
printf(“文件:%s已关闭\n”,文件名);
}
这是不正确的,因为
&name[SLEN]
是数组末尾之后的字节。需要的是阵列的开始


添加_成员(名称)
添加_成员(&name[0])

添加成员(&name[SLEN])-->
添加成员(名称)。前者错误地将指针传递到数组结束后的一个字节。谢谢,工作正常。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "functions.h"
#define SLEN 81
#define FILE_NAME "../database.txt"
void add_members(char *name);
int main(void)
{   
    char name[SLEN], surname[SLEN], address[SLEN];
    unsigned int dob, start_date, end_date;
    add_members(&name[SLEN]);

    return 0;
}

void add_members(char *name)
{   
    FILE *file;
    if ((file = fopen(FILE_NAME, "a")) == NULL)
    {
        printf("cant open file %s\n", FILE_NAME);
        exit(EXIT_FAILURE);
    }

    fputs("Insert FIRST NAME: ", stdout);
    fgets(name, SLEN, stdin); // appears the problem to be here
    check_string(name); // this is defined in another file
    fputs(name, file);
    printf("Name added to database: %s\n", name);

    if (fclose(file) != 0)
        printf("error in closing file %s\n", FILE_NAME);
    printf("File: %s closed\n", FILE_NAME);
}
add_members(&name[SLEN]);