gpt4 book ai didi

c - C 中非常简单的密码函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:58 25 4
gpt4 key购买 nike

我正在尝试创建一个非常简单的加密函数,它接受一个字符数组并返回另一个值增加 1 的字符数组。

准确解释:输入是用户插入的一行文本。我希望数组 line 例如“abcdef”变成“bcdefg”。真正发生的是我无法增加每个角色的值(value),我不知道该怎么做。我没有从编译器中得到任何错误,只是结果是错误的,我认为问题与 strcat 有关,但我无法想象如何解决它。

因为我是 C 级学生,所以在回答中我想要一些东西来修复我的程序,如果可能的话,而不是一个全新的。

#include <stdio.h>
#include <string.h>

char line[20];
char duplicated[20];
char hashed[];

/********************************************************
* hashf -- Simple hash function that takes a character *
* array and returns that takes a character *
* array and returns another character array *
* with its value increased by one. *
* *
* Parameters -- string duplicated from the text *
* inserted by the user *
* *
* Returns -- the hashed array (supposed to...) *
********************************************************/
char hashf(char duplicated[]) {
hashed[0] = '\0';
for (int i = 0; duplicated[i] != '\0' ; ++i) {
duplicated[i] += 1;
strcat(hashed, duplicated[i]);
}
return (hashed);
}

int main() {
printf("Put a text to hash: ");
fgets(line, sizeof(line), stdin);

strcpy(duplicated, line); // strcpy(string1, string2) -- copy string 2 into string 1

/* This two line are used to remove the '\n' character from the end of the array */
duplicated[strlen(duplicated)-1] = '\0';
line[strlen(line)-1] = '\0';

printf("The text %s become %s", line, hashf(duplicated));
}

最佳答案

很多错误。

不要忽略编译器警告。

第一次警告

warning: array ‘hashed’ assumed to have one element char hashed[];

你还没有分配内存所以它被假定为1字节;

将其更改为 char hashed[40];

第二次警告

warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast [-Wint-conversion] strcat(hashed, duplicated[i]); ^~~~~~~~~~ Blockquote

/usr/include/string.h:133:14: note: expected ‘const char * restrict’ but argument is of type ‘char’ extern char *strcat (char *__restrict __dest, const char *__restrict __src)

strcat有原型(prototype) char * strcat ( char * destination, const char * source );

注意第二个参数 const char * ,这意味着您传递一个地址,它将连接该地址的字符串直到找到 \0 但您传递的是 char(将不起作用)

第三次警告

warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=] printf("The text %s become %s", line, hashf(duplicated));

因为你的函数返回类型是 char 它应该是 char *

所以总结如下改变你的功能

char* hashf(char duplicated[]) {
hashed[0] = '\0';
for (int i = 0; duplicated[i] != '\0' ; ++i) {
duplicated[i] += 1;
}
// strcat(hashed, duplicated); as others suggested no need for this
//}
return (duplicated);
}

关于c - C 中非常简单的密码函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42884182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com