1

私は以下のようなACコードを持っています。
区切り文字で区切られたテキスト内の単語数をカウントしたい。
コードはコンパイルされますが停止します。
何が問題ですか?
これは以下の私のコードです。

#include <stdio.h>
#include <string.h>

int WordCount(char *text,char delimiter)
{
    char *s;
    int count = 0;
    strcpy(s,text);
    while(*s){
        if(*s==delimiter){
            count++;
        }
    }
    return count;
}

int main(void)
{
    char *line = "a,b,c,d,e";

    printf("%d\n",WordCount(line,','));
    return 0;
}
4

3 に答える 3

5

ポインタをインクリメントするのを忘れたためs、無限ループが発生しました。文字列をコピーする代わりに(メモリを割り当てる必要があります)、入力を指すようにします。

int WordCount(char *text,char delimiter)
{
    char *s = text;
    int count = 0;
    // strcpy(s,text);
    while(*s){
        if(*s==delimiter){
            count++;
        }
        ++s;
    }
    return count;
}
于 2013-02-01T19:27:49.367 に答える
2
char *s;
int count = 0;
strcpy(s,text);

s配列オブジェクトではなく、初期化されていないポインタです。

于 2013-02-01T19:25:58.217 に答える
2

char *s;s-スタックまたはヒープにメモリを割り当てます。

プログラムの間違い

  • 宣言中は、すべての変数を初期化する必要があります。
  • 有効なメモリは、ポインタ変数に割り当てる/割り当てる必要があります。
  • 不定ループ、常に文字列の最初の文字をチェックします。

以下のようにコードを変更します

...
char *s = NULL;
int count = 0;
s = text; 
while(*s);
{
    if (*s == delimiter)
    {
        count++;
    }
    s++;
}
...
于 2013-02-01T19:27:55.733 に答える