有人知道我在这个程序中做错了什么吗?

Anyone knows what I did wrong in this program?

提问人:O D E 提问时间:9/23/2023 更新时间:9/23/2023 访问量:52

问:

我正在尝试使用此程序在括号中加密()和解密()字符串,但它会不断加密和解密右括号和后面的单词。

        if (strncmp(input, "encrypt", 7) == 0) {
            char *textToEncrypt = input + 8;  // Skip "encrypt" and the space
            if (*textToEncrypt == '(') {
                textToEncrypt++;  // Skip the opening parenthesis
                char *closingParenthesis = strchr(textToEncrypt, ')');
                if (closingParenthesis) {
                    *closingParenthesis = '\0';  // Terminate the string at the closing parenthesis
                }
            }
            encrypt(textToEncrypt);
        }

void encrypt(char text[]) {
    char encryptedChar;
    char array[1000] = "";
    for (int i = 0; i < strlen(text); i++) {
        encryptedChar = text[i] + 5;
        //printf("\nThe ASCII Value of %c is %u\n", encryptedChar, (unsigned char)encryptedChar);
        strncat(array, &encryptedChar, 1);
    }
    printf("%s\n", array);
    memset(array, 0, sizeof array);
}

解密代码类似于加密,只是反转了。

Result
Enter command: encrypt(hi)
mn.
Enter command: decrypt(mn)
hi$
Enter command: encrypt(hi
mn
Enter command: decrypt(mn
hi
Enter command: encrypt(hi)ghjkl
mn.lmopq
Enter command: decrypt(mn)ghjk
hi$bcef
Enter command:

如何让它只加密/解密括号中的单词?

数组 c char chararray

评论


答:

1赞 ikegami #1
  1. encrypt(textToEncrypt);应该在紧接之后(在最里面)。*closingParenthesis = '\0'if

  2. input + 8应该是 .您在上一行中使用的事实应该是一个提示!也许你应该避免使用“幻数”并推导出这些常量......input + 77

评论

0赞 O D E 9/23/2023
就是这样。为了一个号码浪费了 15 分钟。多谢