我是C的新手,我正试图解决K& R书中的一个练习问题。问题是检测给定字符串是否以与其他字符串相同的内容结束。
例如,如果字符串1是ratandcat
而字符串2是cat
。然后字符串2以字符串1结尾。为了解决这个问题,我提出了半个解决方案,我被指针所震惊。
我的想法是找到字符串1结束的位置以及字符串2开始的位置,以便我可以继续进行。我有这段代码:
int strEnd(char *s,char *t){
int ans,slength =0 ,tlength = 0;
while(*s++)
slength++;
while(*t++)
tlength++;
s += slength - tlength;
printf("%c\n",*t);
printf("%c\n",*s);
return ans;
}
void main() {
char *message = "ratandcat";
char *message2 = "at";
int a = strEnd(message,message2);
}
但奇怪的是这输出:
%
(and a blank space)
但我希望我的s
指针指向a
。但事实并非如此。这里出了什么问题?
提前致谢。
答案 0 :(得分:2)
一个问题是你已经将s
指针递增到字符串的结尾,然后你添加了更多的东西。您可以使用以下内容执行该循环:
while(s[slength])
++slength;
另一个问题是你假设s字符串比另一个更长。如果不是怎么办?并解决Simon注意到的;
问题。
答案 1 :(得分:1)
末尾有一个额外的分号
while(*t++);
这意味着tlength
永远不会递增,因为在循环中只执行分号(空语句)。