我需要比较令牌。 我需要知道两个相同的令牌。 这是我的代码。比较 - 编译器崩溃时出现问题。 你能帮我找错吗?
int main()
{
int i=0;
char* words[200];
char text[200];
printf("Enter one sentence \n ");
gets(text);
char *word = strtok(text, " ");
while(word!=0)
{
words[i++] = strdup(word);
printf("[%s]\n", word);
word=strtok(NULL, " ,.!?");
}
for (k=0; k<199; k++)
{
for (j=k+1; j<200; j++)
{
if (strcmp(words[k],words[j])==0)
{
printf("Equal words are %s",words);
}
else
{
printf("In this sentence aren't equal words");
}
}
}
getch();
return 0;
答案 0 :(得分:2)
在你的for循环中,你会迭代到200,直到达到最大输入单词数( i )。
无法保证未初始化数组的元素在运行时具有哪个值。它们可能是0,但也可能是任何其他随机数。这意味着,使用超出输入字数的任何数组元素执行strcmp将导致未定义的行为。
你的嵌套for循环如下:
for (k=0; k < i-1; k++)
{
for (j=k+1; j < i; j++)
{
...
}
}
答案 1 :(得分:1)
我意识到这是一个老问题,但我发现@ elgonzo的答案很有帮助,并且能够在一些其他更改之后让您的程序编译。我添加了库,将\n
添加到print语句中,并初始化了可能属于您的问题的变量k
和j
。
这是我的版本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i=0, k=0, j=0;
char* words[200];
char text[200];
printf("Enter one sentence \n ");
gets(text);
char *word = strtok(text, " ");
while(word!=0)
{
words[i++] = strdup(word);
printf("[%s]\n", word);
word=strtok(NULL, " ,.!?");
}
for (k=0; k < i-1; k++)
{
for (j=k+1; j < i; j++)
{
if (strcmp(words[k],words[j])==0)
{
printf("Equal words are %s\n", *words);
}
else
{
printf("In this sentence aren't equal words\n");
}
}
}
return 0;
}