繁体   English   中英

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

[英]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) != '\0'){
           printf("%c",*(s+j));
           j++;
       }
   }
   
   char *checker( char *cp)
   {
       while( *(cp+i) != '\0'){
           if(*(cp+i) == *tab_p) /* this condition is not applied why?*/
               *(cp+i)= '\b';
           i++;
       }
   
       return cp;
   
   }

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

这部分是由于滥用全局变量造成的。

当您输入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) != '\0'){
       printf("%c",*(s+j));
       j++;
   }
}

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

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

   return cp;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM