智慧女神阿库娅 发表于 2019-11-9 23:18:44

vs2019提示访问写入位置 0x00007FF619B0D000 时发生访问冲突。

#include<stdio.h>

struct Book
{
        char title;   
        char author;   
        float price;      
        unsigned int date;
        char publisher;   
}book;
int main(void)
{
        printf("请输入书名:");
        scanf_s("%s",book.title);
        printf("请输入作者:");
        scanf_s("%s", book.author);
        printf("请输入售价:");
        scanf_s("%f", &book.price);
        printf("请输入出版日期:");
        scanf_s("%d", &book.date);
        printf("请输入出版社:");
        scanf_s("%s", book.publisher);

        printf("书名:%s\n",book.title);
        printf("作者:%s\n", book.author);
        printf("售价:%.2f\n", book.price);
        printf("出版日期:%d\n", book.date);
        printf("出版社:%s\n", book.publisher);

        return 0;
}
第14,16,22行有缺少"scanf_s"的整形参数(对应于转换说明符"2")的警告。

jackz007 发表于 2019-11-9 23:51:25

本帖最后由 jackz007 于 2019-11-9 23:57 编辑

      程序逻辑本身没有任何问题,这个错误让人非常匪夷所思。

      我这里一切正常无比:
C:\Bin>g++ -o x x.c

C:\Bin>x
请输入书名:ABCDEF
请输入作者:AAAA
请输入售价:120.5
请输入出版日期:20191109
请输入出版社:DFGHJK
书名:ABCDEF
作者:AAAA
售价:120.50
出版日期:20191109
出版社:DFGHJK

C:\Bin>

人造人 发表于 2019-11-10 10:43:56

jackz007 发表于 2019-11-9 23:51
程序逻辑本身没有任何问题,这个错误让人非常匪夷所思。

      我这里一切正常无比:

jackz007 发表于 2019-11-10 12:39:00

人造人 发表于 2019-11-10 10:43


      我用 GNU 的编译器,所以,把 scanf_s() 直接改成 scanf() 了

智慧女神阿库娅 发表于 2019-11-10 22:36:52

jackz007 发表于 2019-11-10 12:39
我用 GNU 的编译器,所以,把 scanf_s() 直接改成 scanf() 了

好神奇啊,我重新装一下编译器试试

superbe 发表于 2019-11-11 12:03:44

#include<stdio.h>

struct Book
{
        char title;
        char author;
        float price;
        unsigned int date;
        char publisher;
}book;

int main(void)
{
        printf("请输入书名:");
        scanf_s("%s", book.title, 128);//128
        printf("请输入作者:");
        scanf_s("%s", book.author, 40);//40
        printf("请输入售价:");
        scanf_s("%f", &book.price);
        printf("请输入出版日期:");
        scanf_s("%d", &book.date);
        printf("请输入出版社:");
        scanf_s("%s", book.publisher, 40);//40

        printf("书名:%s\n", book.title);
        printf("作者:%s\n", book.author);
        printf("售价:%.2f\n", book.price);
        printf("出版日期:%d\n", book.date);
        printf("出版社:%s\n", book.publisher);

        return 0;
}

vs下scanf_s输入字符串时加上缓冲区长度参数就好了。
页: [1]
查看完整版本: vs2019提示访问写入位置 0x00007FF619B0D000 时发生访问冲突。