c - 使用C scanf_s的字符串输入

标签 c string scanf c11 tr24731

我一直在寻找自己的答案,但找不到。
我想插入一部分程序,该程序读取“ Hello”之类的字符串并存储并在需要时显示它,以便printf("%s", blah);生成Hello

这是给我麻烦的代码部分

char name[64];
scanf_s("%s", name);
printf("Your name is %s", name);


我知道printf不是问题;在提示后输入内容后,程序崩溃。请帮忙?

最佳答案

根据ISO / IEC 9899:2011标准的附件K.3.5.3.2中的fscanf_s()规范:


  fscanf_s功能等效于fscanf,但cs[转换除外
  说明符适用于一对参数(除非分配抑制用
  *)。这些参数的第一个与fscanf相同。该论点是
  在参数列表中紧随其后的是第二个参数,其类型为
  rsize_t并给出第一个参数指向的数组中的元素数
  一对。如果第一个参数指向标量对象,则将其视为包含以下内容的数组
  一个元素。


和:


  scanf_s函数等效于fscanf_s,其参数为stdin
  插入scanf_s的参数之前。


MSDN说类似的话(scanf_s()fscanf_s())。

您的代码未提供length参数,因此使用了其他一些数字。它并不能确定它能找到什么价值,因此您会从代码中得到古怪的行为。您需要更多类似的内容,其中的换行符可帮助确保实际看到输出。

char name[64];
if (scanf_s("%s", name, sizeof(name)) == 1)
    printf("Your name is %s\n", name);

关于c - 使用C scanf_s的字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56074641/

相关文章:

c - 初始化使指针来自整数,而没有强制转换[默认启用]C 中的错误

c - POSIX 扩展可重入定义,涵盖线程安全

字符串崩溃程序中的 C# 特殊字符

c - 如何在没有确定输入量的情况下使用 scanf

c - scanf 不起作用(整数)

c - scanf格式忽略不相关的字符

c - 在C中的二进制文件中写入字节0

c - 删除C中链表中的头或唯一节点

Python3,当 UserString 不表现为字符串时?

c# - 将相对路径转换为绝对路径 C#