带相等运算符的指针(问题!)

pointer with equality operator ( problem! )

*为什么带有函数 char 指针的相等运算符 (checker ) 对实际字符串没有影响

#define MAXLINE 20
   char strings[MAXLINE];
   char nl[]= "\n";
   char space[]= " ";
   char tab[]= "\t";
   char *tab_p=tab;
   
   int i=0,j=0,c;
   char *s;
   //char* t;
   
   char *checker(char *cp);//function checks for \n,\s,\t
   
   int main()
   {
       while ( (c=getchar() )!= EOF )
           strings[i++]=c;
   
       s=checker(strings);//s gets address return value
   
       while(*(s+j) != '[=10=]'){
           printf("%c",*(s+j));
           j++;
       }
   }
   
   char *checker( char *cp)
   {
       while( *(cp+i) != '[=10=]'){
           if(*(cp+i) == *tab_p) /* this condition is not applied why?*/
               *(cp+i)= '\b';
           i++;
       }
   
       return cp;
   
   }

** 我试图将原始字符串中的制表符替换为退格键和 return 修改后的字符串,但相等运算符对原始字符串没有影响。** 谁能帮我解决这个问题。

部分原因是滥用全局变量。

当您输入checker时,全局i的值已经设置为字符串的长度。所以没有进入while循环。

将所有全局变量移动到需要它们的函数中。具体来说,将它们全部移动到 main 并将 i 添加到 checker.

#define MAXLINE 20
char *checker(char *cp);

int main()
{
   char strings[MAXLINE] = {0};

   int i=0,j=0,c;
   char *s;

   while ( (c=getchar() )!= EOF )
       strings[i++]=c;

   s=checker(strings);

   while(*(s+j) != '[=10=]'){
       printf("%c",*(s+j));
       j++;
   }
}

char *checker( char *cp)
{
   char tab = '\t';
   int i=0;

   while( *(cp+i) != '[=10=]'){
       if(*(cp+i) == tab)
           *(cp+i)= '\b';
       i++;
   }

   return cp;
}