- 论坛徽章:
- 0
|
能不能用数组第一个元素的前一个元素进行指针运算?
看看下面这段代码:
- /* remove trailing blanks and tabs from character string , and delete blank line*/
- int remove(char *s)
- {
- int i;
- i = 0;
- while (s[i] != '\n')
- i++;
- i--;
- while (i >;= 0 && (s[i] == ' ' || s[i] == '\t'))
- i--;
- if (i >;= 0) { /* 数组下标就没关系 */
- s[++i] = '\n';
- s[++i] = '\0';
- }
- return i;
- }
- 偶想用指针实现:
- int remove(char *s)
- {
- char *origin = s;
- while (*s != '\n')
- s++;
- s--;
- while (s - origin >;= 0 && (*s == ' ' || *s == '\t'))
- s--; /*如果要处理的行为空,些时s将指向数组第一个元素的前一个元素 */
- if (s - origin >;=0) { /*此处有问题了, 如果指向第一个元素的前一个元素的指针可以用于这个运算,s - origin就是合法的,即得到-1*/
- *++s = '\n';
- *++s = '\0';
- }
- return s - origin;
- }
复制代码
我试过,在这里s - origin(当处理的行为空时)结果不对,所以这个函数不能用指针这么来实现。 |
|