[英]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.