我有一个for循环,它扫描一个名为text
的用户输入字符串,从它的ASCII值中减去一个数字(int键),并将每个字符替换为一个新字符串(textEnc
)。
每次for循环时,当前字符和之前的所有字符都会被替换。因此,如果初始字符串是“TEST”,而不应用键减法,输出将是“TTTT”。它将第一个字符替换为第二个字符,然后将第二个字符替换为第一个字符。
为什么会出现这种情况?如何解决?
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main()
{
// Interface for inputting and storing string and key
string text = get_string("String to encrypt: ");
int length = strlen(text);
int key = 0; // User inputs a key between 1 and 15.
do
{
key = get_int("Enter key [1-15]: ");
} while (key < 1 || key > 15);
string textEnc[length]; // empty array initialised to store the encrypted string. It is set to the same length as the inputted string.
for (int i = 0, j = length; i < j; i++)
{
char asc = text[i] - key;
textEnc[i] = &asc;
}
}
字符串
我试着把一个字符串的内容一个字符一个字符地移到另一个字符串,但是每个“循环”都用当前字符替换它之前的所有字符。
如何将textEnc
改为char而不是string数组?
1条答案
按热度按时间s6fujrry1#
我试用了您的代码,当我编译代码时,我收到了一个关于试图在字符/整数中存储指针值的警告。
字符串
争论的焦点,是这一行代码。
型
为了更好地说明这里发生的事情,我添加了一些“printf”语句来说明正在发生的过程。
型
下面是一些示例输出,表示在加密文本数组中存储变量“asc”的内存指针的未定义行为。
型
加密文本数组中的每个元素都是一个字符,您只需要存储在“asc”字符变量中派生的值。
型
重新测试此代码将生成最有可能是所要查找的输出类型的代码。
型
从这一点中得到的启示是,要知道什么时候要引用值,什么时候要引用变量的指针。你可能想深入研究一些关于字符数组,字符和指针的用法的“C”教程。