指针运算中的意外结果,在C中

时间:2012-04-02 16:27:29

标签: c pointers

我是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。但事实并非如此。这里出了什么问题?

提前致谢。

2 个答案:

答案 0 :(得分:2)

一个问题是你已经将s指针递增到字符串的结尾,然后你添加了更多的东西。您可以使用以下内容执行该循环:

while(s[slength])
  ++slength;

另一个问题是你假设s字符串比另一个更长。如果不是怎么办?并解决Simon注意到的;问题。

答案 1 :(得分:1)

末尾有一个额外的分号
while(*t++);

这意味着tlength永远不会递增,因为在循环中只执行分号(空语句)。