私は以下の比較を行い、Cプログラムがあります:target
がに発生した場合セグメンテーションフォールト*比較
int find_in_args(char** args, char* target) {
int found = -1;
int i = 0;
while (i != 10) {
if (strcmp(args[i], target) != 0)
++i;
else {
found = i;
break;
}
}
return found;
}
:そうのようなchar*
の配列を
void compare(char** args) {
if (find_in_args(args, ">") != -1) {
printf("In > block");
}
else if (find_in_args(args, "<") != -1) {
printf("In < block");
}
else if (find_in_args(args, "|") != -1) {
printf("In | block");
}
}
find_in_args()
繰り返し処理を">"であれば、プログラムはIn > block
を出力します。 target
が "<"または "|"になると、プログラムはSegmentation fault (core dumped)
を出力します。
しかし、最初に "<"ブロックを移動すると、プログラムはIn < block
を出力し、target
が ">"または "|"の場合はセグメント化エラーが発生します。
char*
配列を反復処理がstrcmp()
を使用していることを比較が唯一たらを発生する可能性があることが表示されます。私はfind_in_args
の各呼び出しのためにargs
のコピーを作ろうとしましたが、コピーで比較を実行しましたが、同じ問題が発生します。
なぜ私は比較関数を一度しか呼び出せないのですか?それでは、どのようにしてセグメンテーションフォルトを取得せずにn回比較関数を呼び出すことができるのですか?
あなたは引数を割り当てるコードを含めることができ
args
初期化/割り当てていることを確認してください? –起動する前にargsを出力してください。 –