1

我有如下的交流代码。
我想计算用分隔符分隔的文本中的单词数。
代码编译但停止。
问题是什么?
这是我下面的代码。

#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;s-在堆栈或堆中分配内存。

程序中的错误

  • 声明时必须初始化所有变量。
  • 应将有效内存分配/分配给指针变量。
  • 无限循环,它总是检查字符串的第一个字符。

修改您的代码,如下所示

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

s是一个未初始化的指针而不是一个数组对象。

于 2013-02-01T19:25:58.217 回答