2012-08-17 50 views
1

我編寫了一個程序來通過異或來加密給定的消息。它有效,但它不會結束。下面是代碼(我已創建3個文件)。Ctrl + D不會停止應用程序在命令窗口中執行

encrypt.h:

void encrypt(char *message); 

message_hider.c:

#include <stdio.h> 
#include "encrypt.h" 

int main() { 
    char msg[80]; 

    while (fgets(msg, 80, stdin)){ 
    encrypt(msg); 
    printf("%s", msg); 
    } 

    return 0; 
} 

encrypt.c:

#include "encrypt.h" 

void encrypt(char *message) { 
    while (*message) { 
    *message++ ^= 0x1f; 
    } 
} 

正如我上面提到的,它的工作原理。但我無法阻止它。當我按Ctrl + D來停止它(以cmd爲單位)時,它也會對它進行加密(我在加密消息後需要停止該代碼)。請給我解釋一下這個案子。

+0

正如你寫的那樣,你能解釋一下你期望這段代碼停止什麼情況嗎? – BugFinder 2012-08-17 07:55:30

+0

cmd不理解Ctrl + D,使用文件結束條件(即寫一個文件並給它到你的程序的標準輸入:'prog <文件')。你不加密,你混淆(一點)。順便說一句,不要指望printf能夠實際顯示混淆文本 – fork0 2012-08-17 07:57:10

+0

你使用一個更糟糕的主題,請將其修改爲有意義的。 – 2012-08-17 08:02:15

回答

2

isprint()可以幫助:

#include <stdio.h> 
#include <ctype.h> 

void encrypt(char *message) 
{ 
    while (*message) { 
     *message = *message^31; 
     message++; 
    } 
} 

int main(void) 
{ 
    char msg[80]; 

    while (fgets(msg, 80, stdin) != NULL) { 
     if (!isprint((unsigned char)*msg)) break; 
     encrypt(msg); 
     printf("%s", msg); 
    } 
    return 0; 
} 
+0

謝謝你這是工作... – 0xEDD1E 2012-08-18 14:06:23

5

當我按下Ctrl鍵+ d停止它(在CMD)

如果這是從Windows cmd你可能想Ctrl+Z

+0

感謝您的幫助 – 0xEDD1E 2012-08-18 14:07:00

4

Ctrl-D用於Unix系統上的控制檯EOF。

Ctrl-Z用於Windows系統上的控制檯EOF。

+0

按下Ctrl-Z +在Windows上輸入cmd.exe。 – Doomjunky 2017-08-01 14:37:26

1

添加退出條件:

if(c < 0x20) break; 

您可能還需要增加其他檢查,以支持回退不實施編碼吧...

http://www.asciitable.com/

0

剛跑

$> kill -l 

查看Linux中的信號列表。您不會在這裏找到SIGKILL(Ctrl + D)信號:(

Ctrl + D是Linux中的SIGKILL(0)信號,它沒有記錄在任何地方 Ctrl + Z用於Windows,它告訴EOF我們需要按「Enter」關閉

+0

這是不正確的。 Ctrl-D不會導致在unix上發送信號。 SIGKILL通常是信號9,而不是0.值0沒有分配標準名稱。 – Kenster 2015-08-25 12:52:59

相關問題