在c函数中指针“未计算值”

时间:2010-12-03 16:34:07

标签: c pointers gcc

我写了一个函数,用于缩短请求长度的字符串(单词的句子)。我不希望句子的切口碰巧出现在一个单词的中间。所以我跳过n个字符,直到我到达一个空格并在那里剪切句子字符串。 我的问题不是一个真正的问题,编译我的函数时会发出一条警告:“警告:未使用计算值”,请参阅代码中的注释行。该功能虽然按预期工作。 所以,无论是我是盲人,还是我对我的项目都持不同意见,实际上我并不理解这个警告。有人可以指点我的功能缺陷吗?


char *
str_cut(char *s, size_t len) {
    char *p = NULL;
    int n = 3;

    p = s + len;
    if (p < (s + strlen (s))) {
        /*
         * do not cut string in middle of a word.
         * if cut-point is no space, reducue string until space reached ...
         */
        if (*p != ' ')
            while (*p != ' ')
                *p--;   // TODO: triggers warning: warning: value computed is not used

        /* add space for dots and extra space, terminate string */
        p += n + 1;
        *p = '\0';

        /* append dots */
        while (n-- && (--p > s))
            *p = '.';
    }
    return s;
}

我在开发机器上的编译器是“gcc版本4.2.4(Ubuntu 4.2.4-1ubuntu4)”

3 个答案:

答案 0 :(得分:10)

警告是由*(取消引用)引起的 - 您没有在任何地方使用取消引用的值。做到这一点:

p--;

并且警告应该消失。

答案 1 :(得分:5)

*p--*(p--)相同。

评估减量,然后取消引用该结果。您实际上并没有对该结果做任何事情,因此警告。如果你刚才说*p,你会得到同样的警告。

答案 2 :(得分:3)

你只是为副作用

这样做
            *p--;
  • 副作用:递减p
  • 表达式的值:p
  • 指向的值

编译器警告您未使用表达式的值: - )