如何使 strcmp() 在我的 C 程序中工作
How to make strcmp() work in my C program
我即将对文本字符串进行加密,使用另一个文本字符串作为 "key" 进行加密。它基本上只是 ASCII 字符的重组。
密钥已提供但结构不当,需要一些额外的编程。 ASCII 字符列在此密钥中,每行一个字符,相应的加密字符在两个索引之外。
这是"key.txt"的例子:
A g
B 9
C ü
D (
E z
...继续所有 ASCII 字符。因此,我的程序中的加密会导致:
"EDABEDA" -> "z(g9z(g"
我在加密的时候。
我让程序接受一个输入字符串,然后用加密密钥字符创建另一个字符串。
我用 for-sling 遍历输入字符串中的每个字符。对于输入字符串中的每个字符,我检查我的加密密钥字符串中是否有匹配的字符。在加密密钥中我一次跳4步因为我要加密只需要比较A,B,C,D...
我使用 strcmp() 查找匹配项。当匹配时,当输入字符串中的字符与加密密钥中的字符相同时,我将加密字符写入输出字符串。加密字符在key-string中位于主字符前两个索引。
警告出现在 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
。几乎所有可以被视为错误的东西。
我即将对文本字符串进行加密,使用另一个文本字符串作为 "key" 进行加密。它基本上只是 ASCII 字符的重组。
密钥已提供但结构不当,需要一些额外的编程。 ASCII 字符列在此密钥中,每行一个字符,相应的加密字符在两个索引之外。
这是"key.txt"的例子:
A g
B 9
C ü
D (
E z
...继续所有 ASCII 字符。因此,我的程序中的加密会导致:
"EDABEDA" -> "z(g9z(g"
我在加密的时候。
我让程序接受一个输入字符串,然后用加密密钥字符创建另一个字符串。
我用 for-sling 遍历输入字符串中的每个字符。对于输入字符串中的每个字符,我检查我的加密密钥字符串中是否有匹配的字符。在加密密钥中我一次跳4步因为我要加密只需要比较A,B,C,D...
我使用 strcmp() 查找匹配项。当匹配时,当输入字符串中的字符与加密密钥中的字符相同时,我将加密字符写入输出字符串。加密字符在key-string中位于主字符前两个索引。
警告出现在 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
。几乎所有可以被视为错误的东西。