當前位置:首頁 » 編程語言 » 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么