带相等运算符的指针(问题!)
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;
}
*为什么带有函数 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;
}