在一行中出现一个单词

时间:2014-08-19 06:01:16

标签: c++ string

我编写了这段代码来查找一行中单词的出现次数。

它在我的Cygwin终端上运行良好。 但现在当我在我的Linux机器上运行它时,它会在strcpy(line, strstr(line,word))

崩溃

为什么会出现这种行为?

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int findWord(char* line,char* word)
{
    int count=0;

    int wordLen = strlen(word);

    while(true)
    {
     if( strstr(line,word) == NULL)
     break;

     strcpy(line, strstr(line,word)); //Crashes here
     printf("@@%s\n",line);
     strcpy(line,line+wordLen+1);
     printf("##%s\n",line);
     count++;
     }
printf("%d\n",count);
return count;
}

int main()
{
    cout <<   findWord("One Two Three Four One Two One Four","Three") << endl;
    system("PAUSE");
return 0;
}

编辑:编辑标题。这对C和C ++都很常见

2 个答案:

答案 0 :(得分:3)

你的指针指向常量字符串“一二三四一二四”的(第一个字符)。您尝试覆盖此字符串,这是未定义的行为,因为应该允许C实现将其放入只读内存中。任何事情都可能发生。在Cygwin中,它碰巧按预期工作,而在Linux中它崩溃了。

答案 1 :(得分:0)

char* line

它的指针并将其指向一个常量字符串。编译器将其放在标记为只读的内存中。修改它会导致Undefined behaviour