0

だから私はこのコードでタイトルが言うことをやっています

else if(input[0] == 'i'){
        printf("This works");
        if(isspace(input[1])){
            x = 2;
            while(input[x] != '\0'){
                tempS[x - 2] = input[x];
            }
            inp = atoi(tempS);
            for(x = x-2; x >= 0; x--){
                tempS[x] == NULL;
            }
            insert(&linkedList, inp);
            printf("%i %s %c", inp, " sucessfully inserted.", '\n');
        }
    }

挿入は無視してかまいません。基本的に、ユーザー入力はiといくつかの数字である必要があります。

例:i 27

次に、プログラムはそれが他の場合はiであることを認識し、iの後の番号を取得する必要があります。

変数の初期化は次のとおりです。

char *input;
int inp = 0;
int x = 0;
char *tempS[255];

前もって感謝します。

編集:問題は、printfの前にセグメンテーション違反が発生することです。

4

3 に答える 3

1

あなたは無限ループで立ち往生しています。

 while(input[x] != '\0')
 {
          tempS[x - 2] = input[x];
 }

命令を追加してx++;、配列入力の次の要素を読み取れるようにします。そうしないと、x=2の位置でスタックします。

これchar *input; これは単なるポインタであり、現在使用しているように使用するにはメモリを割り当てる必要があります。以下をせよ:

input = malloc(sizeof(char) * N);

Nは、入力配列に含める要素の数です。

segmentation fault以前に割り当てられていなかったメモリにアクセスしようとしているために取得しています。

于 2012-11-19T23:46:19.767 に答える
1

あなたはmallocを使ってあなたの入力ポインタにメモリを割り当てる(メモリを予約する)必要があります。何かのようなもの:

char *input = malloc( sizeof(char) * 128 ); //If you needs 128 positions

見てください:

//  *---*---*---*---*------*
//  | i |   | 2 | 1 | \'0' |
//  *---*---*---*---*------*
//            ^----- You stay here.

while(input[x] != '\0'){
    tempS[x - 2] = input[x];
}

を宣言しx = 2たので、3番目の位置からchar '2'(文字列として入力したため、Char)を開始します。これは、nullターミネータ' \ 0'ではないため、whileループは内部ステートメントをtempS[x - 2] = input[x];永久に実行します。したがって、これを修正するには、次のようなx変更を追加する必要があります。

while(input[x] != '\0'){
    tempS[x - 2] = input[x];
    x++;
}
于 2012-11-19T23:46:32.853 に答える
1

whileループの問題:xが増加しないため、終了することはありません。コピーされない'\0'ため、atoiクラッシュする可能性があります。inputchar配列ですが、tempScharポインタ配列です。

文字列の代わりにナンセンスなポインタ配列を指定すると、input[2]実際にループが終了し、ループが終了しない限り、クラッシュの理由はすぐにはわかりません'\0'。この場合、クラッシュします。atoi表示しているこのコードがどれほど壊れているかを考えると、表示していないコードにクラッシュが発生している可能性があります...

警告をオンにした後、コンパイラの警告を修正することから始めます。それらをオンにするには、コンパイラ用のcomppand行スイッチが必要です。gcc-Wは良いスタートです...実際の男性は少なくとも-W -Wall -pedantic -std=c11c11使用するC標準のバージョンに置き換えてください)でコンパイルします。

于 2012-11-19T23:55:38.410 に答える