文字列テストに文字を追加しようとすると、セグメンテーションエラーが発生します。私は複数の反復を試みたが、なぜエラーが出るのか理解できない。テストを\0
に設定しようとしました。私は外部テストにどのようにアクセスしているのか分かりません。文字列と文字を連結しようとしたときのCのセグメンテーションエラー
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
#define _XOPEN_SOURCE
#include <unistd.h>
#include <crypt.h>
//this intializes the argument count and argument vector
int main(int argc, string argv[]) {
//this makes sure it is a string
if (argv[1] != NULL) {
//this makes sure that the user typed 2 arguments,
// the second being the keyword
if (argc != 2) {
printf("no hash inputed\n");
return 1;
}
//main program once the keyword has been verified
int h_len = strlen(argv[1]);
string hash = argv[1];
string test = "A";
int p_len = 0;
printf("H len is %i and P len is %i\n", h_len, p_len);
printf("%s and test: %s\n", hash, test);
//this will iterate through the 1st space and test the charachters
for (int j = 0; j < 4; j++) {
//iterates through the characters that can be used in the password
//for (int i = A; i < z; i++)
//for (char ch = 'A' ; ch <= 'z' ; ch == 'Z' ? ch = 'a' : ++ch)
for (char i = 'A'; i <= 'z'; i++) {
//this skips the ASCII inbetween Z and a
if (i > 'Z' && i < 'a') {
i = 'a';
}
printf("%c", i);
//test[j] = test[j] + (char)i;
test = strncat(test, &i, 1);
printf(" test is %s\n", test);
...
あなたは 'argv'をチェックする前に' argv [1] 'にアクセスする必要があります。 –
テスト用に1文字を割り当ててから追加しようとしました。 – Spaceghost
コードには '//これはユーザが2つの引数をタイプしたことを確認します '。これらは 'argv [1]'と 'argv [2]'にあり、同じ引数に渡されるときに '' one two ''のような引用符で囲まなければなりません。しかし、コードには、if(argc!= 2)という引数が1つだけ**テストされています - 最初は実行可能ファイルの名前です。 –