gpt4 book ai didi

c - scanf_s() 缓冲区在哪里定义?

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:26 25 4
gpt4 key购买 nike

如果我无法访问互联网,但知道我想使用 scanf_s() 函数从键盘获取输入 (stdin),我怎么知道在哪里声明缓冲区?

目前,当我进入 Visual Studio 中的 scanf_s() 函数时,我看到了:

#if __STDC_WANT_SECURE_LIB__

_Check_return_opt_
_CRT_STDIO_INLINE int __CRTDECL scanf_s(
_In_z_ _Scanf_s_format_string_ char const* const _Format,
...)
#if defined _NO_CRT_STDIO_INLINE // SCANF
;

因此,我可以看到 scanf_s() 接受 1 个定义的参数 (char const * _Format),在这种情况下,它可能是一些占位符,例如 be "%s",但第二个参数没有任何内容 - 用于存储扫描结果的缓冲区的内存地址。

最佳答案

scanf_s 采用可变参数列表。第一个参数是强制性的,一个带有转换规范的字符串,后面的参数取决于格式字符串中存在的转换规范。

对于每个转换规范 %s%c%[scanf_s 需要 2 个参数转换:一个指向 char (char *) 的指针和一个用类型 rsize_t 传递的数字,它指定 指向的数组的大小code>char * 参数。

这是一个例子:

#define __STDC_WANT_LIB_EXT1__ 1 
#include <stdio.h>

int main() {
char buf[32];
int res;

printf("Type a word: ");
res = scanf_s("%s", buf, sizeof(buf));
switch (res) {
case EOF:
printf("Input failure\n");
break;
case 0:
printf("Matching failure\n");
break;
case 1:
printf("Success: you typed '%s'\n", buf);
break;
default:
printf("Unexpected return value %d\n", res);
break;
}
return 0;
}

但是请注意,对 scanf_s 的支持远非普遍。 Microsoft 平台通常支持它,但具有不同的语义,而 linux 和 Mac C 库通常不支持。阅读此问题以了解 Why didn't gcc implement _s functions?

关于c - scanf_s() 缓冲区在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51061704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com