0

データを読みたい:サンプルテキストoppこれが表示されます:サンプル(入力)テキスト(入力)opp(入力)

しかし、私のコードはうまく機能しません。

#include <stdio.h>
#include <stdlib.h>
int main(){
    char separator[] = " ";
    char *schowek;
    char *wejscie;

    gets(&wejscie);
    schowek = strtok(&wejscie,separator);

    while( schowek != NULL )
    {
        printf( "%s\n", schowek );
        schowek = strtok( NULL, separator );
    }

    return 0;
}

わかりました、私はこのコードを持っています。

#include <stdio.h>
#include <stdlib.h>

int main()
{

    char * slowo[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "hundred",
"thousand", "million"};
    int liczba[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90,100,1000,1000000};

    char n[]="";
    int i=0;

    char s1[]="zero";


    char separator[] = " ";

    char wejscie[1024];
    if (fgets(wejscie, 1024, stdin))
    {
        char* schowek = strtok(wejscie,separator); /* Removed '&'. */

        if(strcmp(wejscie,n)==0)
        {
            exit;
        }

        while (schowek)
        {
            printf("%s\n", schowek);
            schowek = strtok(NULL, separator);
        }
    }
    return 0;
}

彼はすべて大丈夫ですか?次に、文字列を数値に変換したいと思います。

サンプル入力

6つの負の7,2291百万百万

サンプル出力

6 -729 1000101

どうやってやるの?

4

3 に答える 3

3

wejscieはユニタライズされたポインタでありgets()、メモリに書き込んでいてはならないため、セグメンテーション違反が発生している可能性があります。gets()読み取られる文字数を制限する機能がないため、バッファオーバーランの影響を受けやすいことに注意してください( warning:gets関数は危険ですを参照)。fgets()代わりに、char[]:を使用してください

char wejscie[1024];
if (fgets(wejscie, 1024, stdin))
{
    char* schowek = strtok(wejscie,separator); /* Removed '&'. */
    while (schowek)
    {
        printf("%s\n", schowek);
        schowek = strtok(NULL, separator);
    }
}

このプログラムには関係strtok()ありませんが、スレッドセーフではないことに注意してください。

于 2013-03-21T12:14:22.230 に答える
0

読み取ったデータを保持するためのバッファーを割り当てませんでした。

 char *wejscie;

バッファのアドレスを保持するためのポインタを割り当てますが、実際のバッファは割り当てません。

 gets(&wejscie);

十分な大きさのバッファではなく、そのポインタを読み込みます。

これはそれを行う方法です(スタックにバッファを割り当てます):

 char buffer[1024];
 fgets(buffer, sizeof(buffer), stdin);

ポインタと動的メモリを使用したい場合は、これがその方法です。

 char * wejscie = malloc(1024);
 fgets(wejscie, 1024, stdin);
于 2013-03-21T12:13:28.527 に答える
0

データを保存するためのメモリがありません。簡単な例:

char wejscie[256];
gets(wejscie);

現在wejscie、有効なメモリブロックを指しています。

于 2013-03-21T12:16:17.673 に答える