[C6064]警告以及解决方法

对于函数scanf_s();

当出现C6064这个警告的时候,预示着缺少一个整形参量,该参量的功能是表明输入字符的长度(可以使用sizeof,strlen 等函数);

例子如下:

scanf_s("%s", book.title,sizeof(book.title));


完整源代码如下:

(结构体传参的测试)

#include



struct Date

{

int year;

int month;

int day;

};

struct Book

{

char title[128];

char auther[40];

float price;

struct Date date;

char publisher[40];

};



struct Book GetInput(struct Book book)

{

printf_s("请输入书名:");

scanf_s("%s", book.title,sizeof(book.title));

printf_s("请输入作者:");

scanf_s("%s", book.auther,sizeof(book.auther));

printf_s("请输入售价:");

scanf_s("%f", &book.price);

printf_s("请输入出版日期:");

scanf_s("%d-%d-%d", &book.date.year, &book.date.month, &book.date.day);

printf_s("请输入出版社:");

scanf_s("%s", book.publisher,sizeof(book.publisher));



return book;

}



void printBook(struct Book book)

{

printf_s("书名 :%s \n", book.title);

printf_s("作者 :%s \n", book.auther);

printf_s("售价 :%f \n", book.price);

printf_s("出版日期 :%d-%d-%d\n", book.date.year, book.date.month,book.date.day);

printf_s("出版社 :%s\n", book.publisher);

}



int main()

{

struct Book b1={0}, b2={0};

printf_s("请输入第一本书的信息...");

putchar('\n');

b1 = GetInput(b1);

printf_s("请输入第二本书的信息...");

b2 = GetInput(b2);

printf_s("录入完毕,现在输出:\n");

printf_s("第一本书的信息:\n");

printBook(b1);

printf_s("第二本书的信息:\n");

printBook(b2);

return 0;

}

输入使用 scanf() ,是不安全的,因为他在读取字符串的时候不会检查边界,可能会造成内存泄露,在 Visual Studio 中编译会报错,推荐使用 scanf_s() 。

你可能感兴趣的:(debug,c++,c语言,算法)