簡體   English   中英

如何使 strcmp() 在我的 C 程序中工作

[英]How to make strcmp() work in my C program

我即將對文本字符串進行加密,使用另一個文本字符串作為加密的“密鑰”。 它基本上只是 ASCII 字符的重組。

密鑰是給定的,並且結構很糟糕,需要一些額外的編程。 ASCII 字符列在此密鑰中,每行一個字符,對應的加密字符距離兩個索引。

這是“key.txt”的示例:

A g
B 9
C ü
D (
E z

...繼續所有 ASCII 字符。 因此,我的程序中的加密會導致:

"EDABEDA" -> "z(g9z(g"

當我進行加密時。

  1. 我讓程序接收一個輸入字符串,然后用加密密鑰字符創建另一個字符串。

  2. 我使用 for-sling 遍歷輸入字符串中的每個字符。 對於輸入字符串中的每個字符,我檢查我的加密密鑰字符串中是否有匹配的字符。 在加密密鑰中,我一次跳 4 個步驟,因為我要加密並且只需要比較 A、B、C、D...

  3. 我使用 strcmp() 來查找匹配項。 當匹配時,當輸入字符串中的字符與加密密鑰中的字符相同時,我將加密字符寫入輸出字符串。 加密字符放置在密鑰串中主要字符之前的兩個索引處。

  4. 警告發生在 strcmp()

這是代碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 3000

void encryption(char *input);

int main()
{
    char input[] = "EDABEDA";
    encryption(input);
}

void encryption(char *input)
{
    int length,i,k;
    size_t result;
    char dicc[1000];
    char output[SIZE];
    FILE *f;

    f = fopen("key.txt","r");

    fseek(f, 0, SEEK_END);
    length = ftell(f);
    fseek(f, 0, SEEK_SET);
    result = fread(dicc, 1, length, f);

    int lenDic = strlen(dicc);
    int lenInp = strlen(input);

    for (i = 0 ; i < lenInp ; i++)
    {
        for (k = 4 ; k < lenDic ; k = k + 4)
        {
            if (strcmp(input[i],dicc[k]) == 0)
            {
                output[i] = dicc[k+2];
                printf("%c",output[i]);
            }
        }
    }
    fclose(f);
}

我收到以下警告,但程序不起作用。 任何可以幫助我解決此 strcmp 警告並知道我應該如何重新安排我的程序以滿足其要求的人?

warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
if (strcmp(input[i],dicc[k]) == 0)
^
In file included from crypt.c:3:0:
/usr/include/string.h:144:12: note: expected ‘const char *’ but argument is of type ‘char’
 extern int strcmp (const char *__s1, const char *__s2)
            ^
warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
if (strcmp(input[i],dicc[k]) == 0)
^
In file included from crypt.c:3:0:
/usr/include/string.h:144:12: note: expected ‘const char *’ but argument is of type ‘char’
extern int strcmp (const char *__s1, const char *__s2)
           ^

使用strcmp()比較字符串,而不是字符。 對於你的情況這個

if (input[i] == dicc[k])

應該管用。

請注意, char只是整數類型而不是字符串類型,c 中沒有字符串類型。 還有一件事,編寫安全代碼! 檢查fopen()成功,如果length不超過999 幾乎所有可以被視為錯誤的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM