2010-12-03 149 views
4

我寫了一個函數,它可以縮短請求長度的字符串(單詞句)。我不希望這個句子的切割恰好在一個單詞的中間。所以我跳回n個字符,直到我到達一個空間並在那裏切斷了這個句子。 我的問題是不是真的有問題,編譯我的函數吐出一個警告,說:「警告:值計算未使用」,請參閱代碼中的註釋行。該功能按預期工作。 因此,無論我是盲人還是坐在我的項目上,實際上我都不明白這個警告。請問任何人都可以指出這個功能的缺陷嗎?c函數中指針「未使用計算值」


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)」

+1

爲什麼你會用一段時間? (只是好奇) – Blam 2010-12-03 16:40:20

+0

另外,它應該檢查該循環中的「p> s」(就像它在第二個中那樣)。 – Lars 2010-12-03 16:45:37

+0

@Blam:因爲它是Alpha-Code,而且還不是很乾淨。是的,那個「如果」是不需要的。謝謝:-) @lars:真的,謝謝,我剛剛添加了! – 2010-12-03 17:00:30

回答

8

該警告是由於*(取消引用) - 您沒有在任何地方使用取消引用的值。只是做它:

p--; 

和警告應該消失。

4

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

評估遞減量,然後解除引用結果。你實際上沒有做任何結果,因此警告。如果你只是說*p,你會得到同樣的警告。

3

你只是這樣做的副作用

  *p--; 
  • 副作用:減量p
  • 表達
  • 值:值p指向

編譯器警告你不使用表達式的值:-)