显示分段错误(核心已转储)vigenere 密码
Showing segmentation fault(core dumped) vigenere cipher
我正在为 cs50 做 pset,无论我做什么,它都会显示分段错误。
我试过各种东西,但它总是显示同样的东西。
这是我要实现的 vigenere 密码的代码。
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,string argv[]){
if(argc == 2){
//check if text
if(isalpha(argv[1])){
//key
string num = argv[1];
int num_length = strlen(num);
//convert key to lower for easier stuff,dont want to repeat for higher too
for(int i = 0;i < num_length;i++){
if(isupper(num[i])){
num[i]= tolower(num[i]);
}
}
//ask for name
printf("Line to be encoded please :- \n");
string name = GetString();
//main stuff
for(int i=0,n = strlen(name);i < n;i++){
if(isupper(name[i])){
//key part
int keyu = (num[i] - 97) % num_length;
//converting to alphabetical index
int alpha_name_upper = name[i] - 65;
//encoding
int encoded_upper = (alpha_name_upper + keyu) % 26;
//converting back to ascii index
name[i] = encoded_upper + 65;
}
if(islower(name[i])){
int keyl = (num[i] - 97) % num_length;
int alpha_name = name[i] - 97;
int encoded_lower = (alpha_name + keyl) % 26;
name[i] = encoded_lower + 97;
}
}
printf("Encoded line :- %s \n",name);
}
}else{
return 1;
}
}
this keeps showing segmentation fault no matter what I do
很遗憾,您没有向我们展示 <cs50.h>
的内部结构,也没有向我们展示 string
是什么,也没有向我们展示 GetString()
的功能。
如果我们假设 string
是 char*
的类型定义(唯一有意义的),那么这一行:
if(isalpha(argv[1])){
不应编译,因为在 char*
上调用 isalpha
没有意义。
无论如何,当你有核心转储时,你应该做的第一件事是用调试信息构建程序(用-g
选项)和 运行 它在调试器下(例如 gdb
)。这将告诉您程序的哪一行崩溃了。
如果你运行在支持valgrind的平台(如Linux)上,你应该运行 valgrind下的程序也一样,它通常可以告诉你完全你的程序出了什么问题。
我正在为 cs50 做 pset,无论我做什么,它都会显示分段错误。
我试过各种东西,但它总是显示同样的东西。
这是我要实现的 vigenere 密码的代码。
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,string argv[]){
if(argc == 2){
//check if text
if(isalpha(argv[1])){
//key
string num = argv[1];
int num_length = strlen(num);
//convert key to lower for easier stuff,dont want to repeat for higher too
for(int i = 0;i < num_length;i++){
if(isupper(num[i])){
num[i]= tolower(num[i]);
}
}
//ask for name
printf("Line to be encoded please :- \n");
string name = GetString();
//main stuff
for(int i=0,n = strlen(name);i < n;i++){
if(isupper(name[i])){
//key part
int keyu = (num[i] - 97) % num_length;
//converting to alphabetical index
int alpha_name_upper = name[i] - 65;
//encoding
int encoded_upper = (alpha_name_upper + keyu) % 26;
//converting back to ascii index
name[i] = encoded_upper + 65;
}
if(islower(name[i])){
int keyl = (num[i] - 97) % num_length;
int alpha_name = name[i] - 97;
int encoded_lower = (alpha_name + keyl) % 26;
name[i] = encoded_lower + 97;
}
}
printf("Encoded line :- %s \n",name);
}
}else{
return 1;
}
}
this keeps showing segmentation fault no matter what I do
很遗憾,您没有向我们展示 <cs50.h>
的内部结构,也没有向我们展示 string
是什么,也没有向我们展示 GetString()
的功能。
如果我们假设 string
是 char*
的类型定义(唯一有意义的),那么这一行:
if(isalpha(argv[1])){
不应编译,因为在 char*
上调用 isalpha
没有意义。
无论如何,当你有核心转储时,你应该做的第一件事是用调试信息构建程序(用-g
选项)和 运行 它在调试器下(例如 gdb
)。这将告诉您程序的哪一行崩溃了。
如果你运行在支持valgrind的平台(如Linux)上,你应该运行 valgrind下的程序也一样,它通常可以告诉你完全你的程序出了什么问题。