【发布时间】:2015-04-22 16:48:26
【问题描述】:
我正在尝试编写一个函数,用于在字符串数组中搜索字符串的唯一部分(最多两个字符)。尽管strstr 和strchr 无法正常工作并且由于某种原因使我的程序崩溃。所以我求助于尝试创建类似于它们的功能的东西。
我的问题是:
为什么 strstr 不起作用(类似于 strstr(lex[j],word)),我在这里做错了什么?
这是在字符串数组中搜索两个唯一字符的函数的代码:
void convert(char word[])
{
int i;
for (i = 0 ; i <= strlen(word) ; i++)
{
if(word[i] >= 65 && word[i] <= 90)
{
word[i] = word[i]+32;
}
}
}
int twochar(char lex[50][50],char word[], int size,char temp[3])
{
int i,j,k,count,totlen;
convert(word);
for (i = 0 ; i < strlen(word) - 1 ; i++)
{
count = 0;
totlen = 0;
for(j = 0; j<size; j++)
{
convert(lex[j]);
totlen += strlen(lex[j]) - 1;
for(k = 0 ; k < strlen(lex[j]) - 1 ; k++)
{
if (word[i] != lex[j][k] || word[i+1] != lex[j][k + 1])
{
count++;
}
}
}
if(count = = totlen)
{
temp[0] = word[i];
temp[1] = word[i+1];
}
}
}
int main(int argc, char *argv[])
{
char lex[50][50] = {"word1","word2","word3","word4" }, word[] = "test";
char p[3];
twochar(lex,word,4,p);
printf("%c%c\n",p[0],p[1]);
return 0;
}
【问题讨论】:
-
这个
strlen(lex[j])-1是灾难的收据。想象一下如果lex[j]是一个长度为0的空“字符串”会发生什么。提示:检查strlen()返回的类型。 -
我删除了我的评论,其中说您不会使用
temp[2]='\0'终止temp[],因为我注意到您从不使用temp或p作为字符串,仅作为普通数组使用。 -
我知道这不是最好的解决方案,但有什么替代方案?
-
在调试器中运行您的代码,跟踪它并检查相关值。要了解如何执行此操作,您可以阅读此处:ericlippert.com/2014/03/05/how-to-debug-small-programs
-
在这种情况下,代码会更清晰
if(word[i] >= 'A' && word[i] <= 'Z')