【发布时间】:2021-09-08 11:52:18
【问题描述】:
*为什么相等运算符与函数 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;
}
** 我正在尝试用退格替换原始字符串中的制表符并返回修改后的字符串,但相等运算符对原始字符串没有影响。** 谁能帮我解决这个问题。
【问题讨论】:
-
停止写
*(cp+i)之类的东西。而是使用cp[i]。不要与语言抗争。 -
问题是由于
checker使用了i的全局变量,这太疯狂了。该全局变量具有在main中写入的最后一个值(这也是疯狂地使用全局变量)。换句话说,它索引字符串末尾之后的字符。另外,您忘记了以空结尾的字符串。这里有很多错误。 -
有什么理由定义一个 char 数组来保存制表符和另一个变量指向那里,然后取消引用它而不是只使用
'\t'?你可以简单地使用if(cp[i] == '\t')
标签: c pointers assignment-operator