金熙川 发表于 2020-6-5 14:07:50

scanf函数求问

#include<stdio.h>
int main()
{
char a;
printf("请输入你的名字:");
scanf_s("%s", a);
printf("%s", a);
return0;
}
这样子运行后会出现 0x7AF1E63C (ucrtbased.dll)处(位于 身高体重转换.exe 中)引发的异常: 0xC0000005: 写入位置 0x00220000 时发生访问冲突。这个错误,请问如何解决
还有就是为什么char a后面要跟【256】,谢谢

永恒的蓝色梦想 发表于 2020-6-5 14:15:11

scanf_s 和 scanf 不一样。改成#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
    char a;
    printf("请输入你的名字:");
    scanf("%s", a);
    printf("%s", a);
    return0;
}


char a后面要跟【256】表示这是个数组。

405794672 发表于 2020-6-5 14:53:36

没学过scanf_s。它的用法还是先查查吧。char是个字符类型,单个只是一个字节。一个字节只能存一个字符。而一个汉字至少两个字符。char a【256】表示a有256个字符。这样就防止某些名字过长而无法用a接收的情况了。

小葵花课堂 发表于 2020-6-5 16:44:36

scans("%数据类型“,&变量),例如 scanf("%d",&a); 一定需要加上取地址符号&

金熙川 发表于 2020-6-7 16:59:53

永恒的蓝色梦想 发表于 2020-6-5 14:15
scanf_s 和 scanf 不一样。改成




谢谢我知道了 我用的vs2019,这个编译器自己将scanf函数变为scanf_s了,据说是提高安全性,而且输入字符时还的要求加【】

金熙川 发表于 2020-6-7 17:01:05

405794672 发表于 2020-6-5 14:53
没学过scanf_s。它的用法还是先查查吧。char是个字符类型,单个只是一个字节。一个字节只能存一个字符。而 ...

好多谢谢,我查了下,是因为我的编译器的原因,我用的vs2019,已经将scanf函数变为scanf_s了,据说是为了提高安全性,而且输入字符必须得加【】

永恒的蓝色梦想 发表于 2020-6-7 17:07:16

金熙川 发表于 2020-6-7 16:59
谢谢我知道了 我用的vs2019,这个编译器自己将scanf函数变为scanf_s了,据说是提高安全性,而且输入字符 ...

我也用的 vs2019。要用 scanf_s 的话,写:scanf_s("%s", a, 256);

不过,我更建议你写fgets(a, 256, stdin)

金熙川 发表于 2020-6-7 17:13:04

永恒的蓝色梦想 发表于 2020-6-7 17:07
我也用的 vs2019。要用 scanf_s 的话,写:

不过,我更建议你写

嗯,谢谢,我刚学没多久,后面那个fgets还不太懂,还有就是scanf_s("%s", a, 256);后面的这个256无论什么时候都写256可以吗,在定义char时也写256,这样应该比较方便

永恒的蓝色梦想 发表于 2020-6-7 17:15:01

金熙川 发表于 2020-6-7 17:13
嗯,谢谢,我刚学没多久,后面那个fgets还不太懂,还有就是scanf_s("%s", a, 256);后面的这个256无论什么 ...

你的 char 数组多长 scanf_s 里的数就写多少 。

金熙川 发表于 2020-6-7 17:16:25

永恒的蓝色梦想 发表于 2020-6-7 17:15
你的 char 数组多长 scanf_s 里的数就写多少 。

嗯,我的意思是在定义char数组时可不可以直接定义成256的,好像还有一个方法是char a【】??就是这样空着不定义,他自己能识别你定义了多长

永恒的蓝色梦想 发表于 2020-6-7 17:17:48

金熙川 发表于 2020-6-7 17:16
嗯,我的意思是在定义char数组时可不可以直接定义成256的,好像还有一个方法是char a【】??就是这样空 ...

空着的必须立即赋值,比如char a[]="hello";它的长度就是后面的字符串的长度+1(因为有 '\0')

hui_ym 发表于 2020-6-7 18:06:02

永恒的蓝色梦想 发表于 2020-6-5 14:15
scanf_s 和 scanf 不一样。改成




层主请问为什么我这个输出的x就是一长串数字呢,类似地址一样
#include<stdio.h>
#include<math.h>
void main()
{
        double x, s;
        printf("input number:\n");
        scanf_s("%1f", &x);
        s = cos(x);
        printf("cos of %1f is %1f\n", x, s);
}
输出的是这样的:
input number:
1
cos of -92559604281615349327455055764546598862942936775909121745485824.000000 is 0.811623

金熙川 发表于 2020-6-7 18:09:44

永恒的蓝色梦想 发表于 2020-6-7 17:17
空着的必须立即赋值,比如它的长度就是后面的字符串的长度+1(因为有 '\0')

哦对,理解了,谢谢

永恒的蓝色梦想 发表于 2020-6-7 19:38:51

hui_ym 发表于 2020-6-7 18:06
层主请问为什么我这个输出的x就是一长串数字呢,类似地址一样
#include
#include


是 %lf 啦,不是 %1f

405794672 发表于 2020-6-9 08:50:02

金熙川 发表于 2020-6-7 17:01
好多谢谢,我查了下,是因为我的编译器的原因,我用的vs2019,已经将scanf函数变为scanf_s了,据说是为了 ...

我也用的VS2019啊,但是scanf就是scanf,不会自动转换。只是提示错误。这个函数不能用。查一下百度,改一下项目属性,忽略警告,就能用了。

405794672 发表于 2020-6-9 08:55:52

hui_ym 发表于 2020-6-7 18:06
层主请问为什么我这个输出的x就是一长串数字呢,类似地址一样
#include
#include


输入好像不能限制多少位吧?
页: [1]
查看完整版本: scanf函数求问