【问题标题】:Having Trouble using scanf with char arrays使用带有 char 数组的 scanf 时遇到问题
【发布时间】:2014-03-12 15:47:59
【问题描述】:

我是一名学习 C 的学生(我以前的经验都是 python)并且在调试程序时遇到了麻烦。以下部分尤其让我感到困惑——我认为我错误地使用了 scanf 或 printf (我必须使用这两个,而不是其他函数。)

目的是首先扫描这个字符串,然后将它传递给一个函数对其进行一些工作,但看起来它在扫描时失败了。

#include "stdio.h"

void main(){
    char hexInput[100];
     printf("enter the hexidecimal to be converted");
     scanf_s("%s",hexInput);
     printf("%s\n",hexInput);
}

上面打印空

scanf_s("%s",hexInput);
printf("%s\n",hexInput);

打印一个空行

scanf_s("%s",hexInput);
printf("%s",hexInput);

什么都不打印。

任何指导将不胜感激。通常,我一直使用的输入是字符和数字的组合(该项目处理十六进制字符串),但任何字符串都应该适用于此。我已经在网上广泛地寻找解决方案,我确信这很明显,但我还没有找到它。

我一直在用Visual Studio 2008编译调试。

【问题讨论】:

  • 不确定答案是什么,但您使用的是scanf_s,但您的问题表明您必须使用scanf。另外,除非我遗漏了什么,否则第二个代码块与第一个代码块相同,但你说它的打印方式不同......
  • 根据scanf_s 上的文档,您需要传递另一个参数来指示缓冲区的长度。

标签: c scanf arrays


【解决方案1】:

scanf_s 接收另一个参数。您缺少的是缓冲区大小。来自MSDN

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

所以,试试这样的:

#include "stdio.h"

void main(){
    char hexInput[100];
    printf("enter the hexidecimal to be converted");
    scanf_s("%s",hexInput, 100);
    printf("%s\n",hexInput);
}

【讨论】:

  • @ArthurChamz 99 应该是 100 或更恰当的“...第二个参数,类型为 rsize_t 并给出数组中元素的数量...” C11 §K.3.5.3.2
  • @chux 不错,我不知道。他们什么都想!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多