工作通過一些C問題,並與此打牆。我可以想到另一種方式,但我想更好地理解爲什麼我的支票失敗。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的非alpha字符在它們中!= 0 ergo跳過我的返回(1)。然而,無論插入什麼參數,它似乎都會失敗。
有什麼想法?
當您逐步完成代碼時,調試器會顯示什麼內容?在segfault之前的'argv [i]'的內容是什麼? isalpha()的文檔說它接受什麼作爲參數?你究竟傳遞了什麼? –
./vigenere abc 分段錯誤(核心轉儲) 現在正在逐步完成代碼,但我對gdb並不太熟悉。 這可能是我如何插入信息,如果argv包含多個單個字符比將整個字符串傳遞給isalpha而不是單個字符。 – Gates
這對於您發佈的代碼來說是不可能的。該內容屬於'argv [0]',並且您的for循環從索引1開始。請重試,然後再次閱讀我的評論。 –