這是凱撒密碼加密在edx.org cs50x課程pset2中的問題。C:用凱撒密碼中的符號輸出加密,爲什麼? pset2 cs50
我已經用另一種算法解決了這個問題,但這是我的第一次嘗試,我仍然好奇爲什麼在凱撒文本的右側出現所有這些符號。
即。我輸入文字「Testing
」,輸出是「Fqefuz�����w����l��B��
」,但沒有符號的答案是正確的。
任何人都可以解釋我嗎?
int main(int argc, string argv[])
{
bool keyOk = false;
int k = 0;
do
{
if(argc != 2) // Checking if the key was correctly entered.
{
printf("You should enter the key in one argument from"
" the prompt(i.e. './caesar <key>').\n");
return 1;
}
else
{
k = atoi(argv[1]); // Converting string to int.
keyOk = true; // Approving key.
}
}
while(keyOk == false);
string msg = GetString(); // Reading user input.
char caesarMsg[strlen(msg)];
for(int i=0, n = strlen(msg); i < n; i++)
{
if((msg[i] >= 'a') && (msg[i] <= 'z'))
// Processing lower case characters
{
caesarMsg[i] = ((((msg[i] - 97) + k) % 26) + 97);
}
else if((msg[i] >= 'A') && (msg[i] <= 'Z'))
// Processing upper case characters
{
caesarMsg[i] = ((((msg[i] - 65) + k) % 26) + 65);
}
else
{
caesarMsg[i] = msg[i];
}
}
printf("%s", caesarMsg);
printf("\n");
}
您最近編碼的字符串緩衝區太小了1個字節。您還需要有終止零的空間。 (此外,你甚至不添加終止零。) – usr2564301
可能重複[它是什麼意思是「零終止」](http://stackoverflow.com/questions/2667648/what-does-it - 將被終止的零) – Deduplicator
'char caesarMsg [strlen(msg)];' - >'char caesarMsg [strlen(msg)+1];' – BLUEPIXY