-5

我已经编写了以下代码,它工作正常。但在我进行更改之前,我输入了一些我预计会起作用但没有起作用的语句。就像试验一样,我做了一些改变,它奏效了。请澄清我做错了什么。我最初尝试使用简单的程序来更好地理解指针。

#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++;
}

为什么这不起作用?

4

2 回答 2

3

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

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

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

此外,如果您只想打印出没有要删除的字符的字符串,则不需要 outstring。只是做例如

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

另一方面,如果您还想将字符串存储在 outstring 中并删除字符,则不能像您正在做的那样串联增加指针。因为当您点击要删除的字符时,您希望增加 instring 指针以移过它,但不增加 outstring 指针,因为您没有向该字符串添加任何内容。

于 2013-08-02T19:37:49.480 回答
1

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

多玩一点,你会看到:)

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

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

于 2013-08-02T19:35:23.013 回答