指针中的增量和加法

时间:2013-08-02 19:24:51

标签: c pointers

我已经编写了以下代码,它运行正常。但在我做出改变之前,我已经输入了一些我期望能够起作用的声明但却没有。就像一个试验,我做了改变,它的工作。请澄清我做错了什么。我最初尝试简单的程序,以便更好地理解指针。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
        int i;
        char *instring,*outstring;
        char ch,p;
        instring = (char*)malloc(15*sizeof(char));
        outstring= (char*)malloc(15*sizeof(char));
        printf("Enter the string:");
        gets(instring);
        printf("Enter the character to be removed:");
        scanf("%c",&ch);
        for(i=0;i<strlen(instring);i++)
        {
                if( *(instring+i) != ch)
                {
                *(outstring+i) = *(instring+i);  
                printf("%c",*(outstring+i));
                }
        }

在if声明中,我写了以下内容:

if(*(instring) != ch)
{
 *outstring = *instring;
 printf("%c",*(outstring));
 instring++;
 outstring++;
}

为什么这不起作用?

2 个答案:

答案 0 :(得分:3)

我不确定你的工作是什么意思,但如果你的非工作职能看起来像这样:

for(i=0;i<strlen(instring);i++)
{
    if(*(instring) != ch)
    {
        *outstring = *instring;
        printf("%c",*(outstring));
        instring++;
        outstring++;
    }
}

然后看起来问题是,如果当前字符与ch不匹配,则只递增instring。因此,如果instring's当前字符 匹配ch,您将永久循环并且该过程将会挂起。

另外,如果你想要做的就是打印出没有要删除的字符的字符串,你就不需要超出字符串了。就这样做。

 printf("%c",*(instring));

另一方面,如果您还希望将字符串存储在删除了字符的字符串中,则无法像往常一样增加指针。因为当您点击要删除的字符时,您希望增加instring指针以移过它,但不会增加outtring指针,因为您没有向该字符串添加任何内容。

答案 1 :(得分:1)

确实有效。但你松开了两个字符串(指向它们的指针) 尝试在另外两个指针(char *)中存储指向两个字符串开头的指针,然后执行循环。 最后,打印之前存储的指针 - 因为它们仍然指向您的字符串。当您递增指针instringoutstring时,它们不再指向您的字符串 - 它们指向这些字符串的最后。

再玩一点,你会看到:)

编辑:嗯,不,我写得比读书更快,抱歉。你的(另一个)问题甚至更快 - 比较。您正在将instring与字符进行比较,并且仅在条件为真时才更改它。所以你一遍又一遍地比较同样的事情。

很难说,你的问题到底是什么。