sscanf_s,双倍%c

时间:2015-09-14 11:47:59

标签: c++ scanf

当我想提取两个字符时,我遇到了sscanf_s的一些问题。

示例代码:

#include "stdafx.h"
#include <iostream>
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
   char* text = "ab";
   char a = ' ';
   char b = ' ';

   sscanf_s(text, "%c%c", &a, &b); //the same problem when I use %1c%1c

   return 0;
}

当我运行它时,这不起作用:

  

0x0F76D6AC(msvcr120d.dll)中的未处理异常   ConsoleApplication2.exe:0xC0000005:访问冲突写入位置   00000000

当我用%i%i这样的两个整数进行尝试时,一切正常。

1 个答案:

答案 0 :(得分:5)

您需要指定尺寸。

  

[...]除了%c%s%[转换说明符每个都需要两个参数(通常的指针和rsize_t类型的值,表示接收的大小数组,在使用%c读入单个字符时可能为1。

供参考 - http://en.cppreference.com/w/c/io/fscanf

因此,请使用1作为单个char

的大小

像这样重写 -

sscanf_s(text, "%c%c", &a,(rsize_t)1,&b,(rsize_t)1);
  //explicit casts as corrected in comments by chux