当前位置:首页 » 编程语言 » c语言输入安全
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言输入安全

发布时间: 2022-06-15 01:54:04

1. 怎样检查c语言输入数据的合法性

1、找到安装好的C-free5,双击打开,进入c-free5的主界面。

2. C语言 安全的密码 问题

写了个命令行版本的, 使用的时候, 直接把密码当成命令行参数使用吧,

如果不合心意, 可以自己改改(对于第4类字符, 没有考虑符号表)

/*
@20140129
for

by'热心网友'
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#definePASS_SAFE_NONE0
#definePASS_SAFE_LOW1
#definePASS_SAFE_MED2
#definePASS_SAFE_HIG3


intchkpasswd(char*pass);
intoutput(intsafecode);

intmain(intargc,char**argv){
if(argc!=2){
printf("UsageError ");
exit(1);
}
intret=chkpasswd(argv[1]);
output(ret);
}

intoutput(intcode){
printf("code=%d ",code);
switch(code){
casePASS_SAFE_NONE:
casePASS_SAFE_LOW:
printf("NotSafe ");
break;
casePASS_SAFE_MED:
printf("MediumSafe ");
break;
casePASS_SAFE_HIG:
printf("Safe ");
break;
}
returncode;
}

intchkpasswd(char*pass){
intlen=strlen(pass);
if(len<6)returnPASS_SAFE_NONE;

intb_class1=0;
intb_class2=0;
intb_class3=0;
intb_class4=0;
intret=0;

char*p=pass;
for(p=pass;p<(pass+len);p++){
if(ret>=PASS_SAFE_HIG)returnPASS_SAFE_HIG;

if(*p>='0'&&*p<='9'){//0-9
if(b_class1){
continue;
}else{
b_class1=1;
ret++;
}
}elseif(*p>='A'&&*p<='Z'){//Upper
if(b_class2){
continue;
}else{
b_class2=1;
ret++;
}
}elseif(*p>='a'&&*p<='z'){//Lower
if(b_class3){
continue;
}else{
b_class3=1;
ret++;
}
}else{//Symb
if(b_class4){
continue;
}else{
b_class4=1;
ret++;
}
}
}
returnret;
}

3. C语言:字符串输入与输出相关问题

getchar和putchar都是对字符操作的,而不是字符串,所以需要设计循环为字符串中每一个字符赋值。

以下是示例代码,需要说明的一点是gets输入字符串对于字符串长度没有限制,可能导致越界溢出,不安全,建议改用fgets,另外在新的微软标准中gets函数已被gets_s函数代替,希望对你有帮助。

include<stdio.h>intmain(){ const int count=21;

charstr1[count];charstr2[count];charch;printf("请str1输入字符串(getchar方式): ");int i=0;while((ch=getchar())!' '){ str1[i]=ch;i+;if(i=count-1){ str1[count-1]='';break;} }

str1[i+]='';printf("下面输出str1(putchar方式): ");int j=0;while(str1[j]!''){putchar(str1[j]);j+;}/printf

("请str1输入字符串(gets方式): ");gets(str2);printf("下面输出str1(puts方式): ");puts(str2);return0;}

4. 在VS2008编C语言输入输出有问题

scanf
在vs中是被认为是不安全的,这个不用理会,但是你的程序是有问题的
printf("%d,
%d,
%d",
a,
b
,c
)
输出的时候不要加&符号,这个是取址符,你这样是输出的这3个数的地址

5. C语言 问题 E: 安全的密码

#include <stdio.h>

#include <string.h>

#include <ctype.h>


int main() {

int M, U, L, D, S;

char code[51];

char ch[] = "~!@#$%^";

scanf("%d", &M);

getchar();

while (M--) {

U = L = D = S = 0;

scanf("%s", code);

int len = strlen(code);

if (len < 8 || len > 16) {

printf("NO ");

continue;

}

int i = 0;

while (code[i] != '') {


if (isupper(code[i])) U++;

else if (islower(code[i])) L++;

else if (isdigit(code[i])) D++;

else {

int pos = strchr(ch, code[i]) - ch;

if (pos >= 0 && pos <= 7)

S++;

}

i++;

}

if (((U >= 1) + (L >= 1) + (D >= 1) + (S >= 1)) >= 3)

printf("YES ");

else

printf("NO ");

}

return 0;

}

6. 在C语言中,如何安全地使用void

c语言void是属于空类型。作为函数的返回值的话,是没有返回值的。所以设置为void

7. C语言 数据安全 小虾勿进

这个就是内存溢出 没啥可说的

你的 char szStr[20]; 只定义 不初始化的话

那么 szStr的内容是随机的 有可能没有结束符\0

因此会一直输出到有\0为止

所以为什么说变量初始化很重要

尤其在char类型这里 不初始化 会导致内存泄露

我写个小例子 你一看就明白了

8. 关于c语言scanf输入

死循环的原因是你在else后采取了递归调用,却没有给出递归终结条件。这题也用不着递归,把check函数专稿 如下:

voidcheck(){
inta;
while(1){
scanf("%d",&a);
if(a>0&&a<1000){
printf("%f",sqrt)a));//注意这里是%f而不是%d
break;
}
else
printf("重新输入小于1000的正整数 ");
}
}

9. c语言如何限制非法输入

c语言中大部分自带的方法都有返回值,像scanf方法如果输入正确的话,它会返回一个正整数,所以你可以通过它来判断,如果输入不正确的话它返回是0,你就可以通过这个判断是否为非法输入。
scanf()函数有返回值且为int型。
scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
scanf("%d%d",
&a,
&b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end
of
file,返回值为EOF。

10. c语言不安全为什么还很有多人用

因为C语言比其他语言编译出的软件运行快啊 所以C语言一般放到嵌入式开发
打个比方
你哪天电视遥控器坏了,你要买个新的
1种遥控器芯片是最新电脑用的芯片,用的遥控器用的软件用哪个语言开发都会很快 那这个遥控器价格 呵呵..
另1种遥控器价格就十几块钱 你想它的芯片运算速度能多快... 那假如里面是其他语言 估计你按完开机后10秒(极端例子)后才能响应开机,但用C语言 能马上开机。
安全问题,不就是多个指针跑飞和内存泄漏么,这个真没法避免
但使用指针和内存分配的确能使C语言运行灵活
再说了 其他语言该出Bug也不照样出Bug么