当我想提取两个字符时,我遇到了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
这样的两个整数进行尝试时,一切正常。
答案 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