Scanf_s不保存字符串的值

时间:2014-02-13 16:39:53

标签: c visual-studio-2013

我的C程序有问题。 这是我的main()代码:

void main()
{
const float impo = 0.45;
const float reve = 0.28;
char name[30];
float pauto, pfab, pimp, prev;
printf("Enter the car name\n");
scanf_s(" %s", name);
printf("Enter the price of retail\n");
scanf_s("%f", &pfab);
pimp = pfab * impo;
prev = pfab *reve;
pauto = pfab + pimp + prev;
printf("Car name : %s\tCar final Price = %.2f\n\7",name,pauto);
system("pause");

}

问题在于,当我编译我的代码并输入汽车名称时,它不会出现在printf上... 有人能帮帮我吗?

错误图片:http://i.imgur.com/aZ360Fi.png

2 个答案:

答案 0 :(得分:2)

scanf_s("%s", name);

应该是:

scanf_s("%s", name, sizeof(name)); /* Assumes char name[42 or such]. */

From MSDN

  

scanf wscanf 不同, scanf_s wscanf_s 要求为所有输入参数指定缓冲区大小类型 c C s S 中包含的字符串控件集] 即可。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。


必须是

int main(void)

顺便说一句。

答案 1 :(得分:1)

尝试使用

scanf_s("%s", name, _countof(name));

scanf_s是scanf的安全版本,需要输入缓冲区大小的参数。

另见http://faculty.edcc.edu/paul.bladek/CS131/scanf_s.htm