Cの問題が発生しており、これで壁に衝突しています。私はこれについて別の方法または2つを考えることができますが、私はなぜ私の小切手が失敗しているかを理解したいと思います。引数のisalphaチェックでセグメンテーションエラーが発生する
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
int main(int argc, char *argv[256]){
//Require one alpha only argument if else exit 1
if(argc < 2){
printf("Usage: ./vigenere arg1 [arg2] [arg3]...\n");
return 1;
}
for (int i=1;i<argc;i++){
if(isalpha(argv[i]) == 1){
return 1;
}
printf("%d\n",i);
}
//Prompt the user for some plaintext
//Rotate plaintext by argument
//Print Rotated Text
// exit 0
}
スクリプトは、isalpha()
行まで期待どおり動作しています。 argvの文字はアルファベットではないと仮定しよう!= 0 ergoは私のリターンをスキップする(1)。しかし、引数として何が挿入されたかに関係なく失敗するようです。
どのような考えですか?
コードをステップ実行したときに、デバッガはあなたに何を表示しますか? segfaultの直前の 'argv [i] 'の内容は何ですか? isalpha()のドキュメントは引数として受け入れるとはどういう意味ですか?あなたは実際にそれに何を伝えていますか? –
./vigenere abc セグメンテーションフォールト(コアがダンプされている) コードをステップ実行していますが、私はあまりgdbに詳しいことはありません。 argvに1文字以上の文字が含まれていて、個々の文字の代わりに文字列全体をisalphaに渡すと、情報をどのように挿入することができますか。 – Gates
投稿したコードではこれは不可能です。その内容は 'argv [0]'に属し、あなたのforループはインデックス1から始まります。もう一度やり直して、私のコメントをもう一度読んでください。 –