C 段故障 Pset2 Cs50
C segmentation fault Pset2 Cs50
我正在 CS50 上执行 Pset2 cesear,当我在 运行 程序时不断遇到分段错误。为什么我得到它,什么是分段错误。 ...................................................
#include <ctype.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, string argv[])
{
string key = argv[argc-1];
int keylen = strlen(key);
string plaintext = get_string("Enter the plaintext: ");
int ciphertext [strlen(plaintext)];
int move[strlen(key)];
int counter = 0;
for (counter = 0; counter < 26; counter++)
{
if ((plaintext[counter] > 96) && (plaintext[counter] < 123))
{
move[counter] = (plaintext[counter]) - 97 ;
ciphertext[counter] =key[move[counter]];
}
else if (plaintext[counter] > 64 && plaintext[counter] < 91)
{
move[counter] = plaintext[counter] - 65;
ciphertext[counter] =key[move[counter]];
}
else ciphertext[counter] = plaintext[counter];
}
for (int loop = 0; loop < strlen(plaintext); loop++)
{
printf("%c\n", ciphertext[loop]);
}
}
what is a segmentation fault.
段错误意味着:您试图访问您的程序无法访问的内存。
Why am i getting it
因为你的程序有bug。
没有 http://whosebug.com/help/mcve 就很难说出 错误在哪里。可能是 get_string()
例程。
P.S。永远不要 永远 将指针隐藏在 typedef
后面(就像你显然对 string
所做的那样)——这只会让你和你的代码的其他读者感到困惑。
如果strlen(plaintext)
小于26,则
for (counter = 0; counter < 26; counter++){
if ((plaintext[counter] ...
可能会在 counter >= strlen(plaintext)
时立即导致段错误,因为您正试图访问其范围之外的 plaintext
数组。您可能打算遍历字符串而不是字母表。
我正在 CS50 上执行 Pset2 cesear,当我在 运行 程序时不断遇到分段错误。为什么我得到它,什么是分段错误。 ...................................................
#include <ctype.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, string argv[])
{
string key = argv[argc-1];
int keylen = strlen(key);
string plaintext = get_string("Enter the plaintext: ");
int ciphertext [strlen(plaintext)];
int move[strlen(key)];
int counter = 0;
for (counter = 0; counter < 26; counter++)
{
if ((plaintext[counter] > 96) && (plaintext[counter] < 123))
{
move[counter] = (plaintext[counter]) - 97 ;
ciphertext[counter] =key[move[counter]];
}
else if (plaintext[counter] > 64 && plaintext[counter] < 91)
{
move[counter] = plaintext[counter] - 65;
ciphertext[counter] =key[move[counter]];
}
else ciphertext[counter] = plaintext[counter];
}
for (int loop = 0; loop < strlen(plaintext); loop++)
{
printf("%c\n", ciphertext[loop]);
}
}
what is a segmentation fault.
段错误意味着:您试图访问您的程序无法访问的内存。
Why am i getting it
因为你的程序有bug。
没有 http://whosebug.com/help/mcve 就很难说出 错误在哪里。可能是 get_string()
例程。
P.S。永远不要 永远 将指针隐藏在 typedef
后面(就像你显然对 string
所做的那样)——这只会让你和你的代码的其他读者感到困惑。
如果strlen(plaintext)
小于26,则
for (counter = 0; counter < 26; counter++){
if ((plaintext[counter] ...
可能会在 counter >= strlen(plaintext)
时立即导致段错误,因为您正试图访问其范围之外的 plaintext
数组。您可能打算遍历字符串而不是字母表。