我已经编写了以下代码,它运行正常。但在我做出改变之前,我已经输入了一些我期望能够起作用的声明但却没有。就像一个试验,我做了改变,它的工作。请澄清我做错了什么。我最初尝试简单的程序,以便更好地理解指针。
#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++;
}
为什么这不起作用?
答案 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 *)中存储指向两个字符串开头的指针,然后执行循环。
最后,打印之前存储的指针 - 因为它们仍然指向您的字符串。当您递增指针instring
和outstring
时,它们不再指向您的字符串 - 它们指向这些字符串的最后。
再玩一点,你会看到:)
编辑:嗯,不,我写得比读书更快,抱歉。你的(另一个)问题甚至更快 - 比较。您正在将instring
与字符进行比较,并且仅在条件为真时才更改它。所以你一遍又一遍地比较同样的事情。
很难说,你的问题到底是什么。