2016-06-20 7 views
0

Beim Aufruf dieser Funktion erhalte ich den Fehler, obwohl sie verwendet werden. Kann jemand erklären:Ausdrucksergebnis wird beim Inkrementieren eines Zeigers nicht verwendet

pointers.c:30:5: warning: expression result unused [-Wunused-value] 
    *a++; 
    ^~~~ 

pointers.c:39:9: warning: expression result unused [-Wunused-value] 
     *s++; 
     ^~~~ 

pointers.c:40:9: warning: expression result unused [-Wunused-value] 
     *b++; 
     ^~~~ 

pointers.c:48:7: warning: expression result unused [-Wunused-value] 
     *s++; 
     ^~~~ 
int strend(char *s, char *b){ 
    char *temp = b; 
    while(*s != '\0'){ 
    if(*s == *b){ 
     while(*s == *b && *b != '\0' && *s != '\0'){ 
     *s++; 
     *b++; 
     if(*b == '\0') 
      printf("wrong"); 
     printf("compare: %c, %c\n", *s, *b); 
     printf("equal: %d\n", *s == *b); 
     } 
    } 
    else{ 
     *s++; 
    } 
    printf("check %c, %c\n", *s, *b); 
    if(*b == '\0' && *s == '\0'){ 
     return 1; 
    } 
    else{ 
     b = temp; 
    } 
    if(*s == '\0') 
     printf("bazinga"); 
    } 
    return 0; 
} 
+1

Die Warnung bezieht sich auf die sinnlose Dereferenzierung, nicht auf das Inkrement. Warum deneferenzieren Sie den Zeiger? Was macht dieser '*' Operator in '* s ++'? – AnT

Antwort

4

Sie Dereferenzierung der Zeiger zu, nicht nur sie erhöht wird. Diese Dereferenz gibt Ihnen den Wert, auf den der alte Zeiger (vor dem Inkrement) zeigt, aber Sie verwenden diesen Wert nicht, was zu der Warnung führt.

Einfache Lösung? Verwenden Sie nicht den Dereferenzierungsoperator *.

+3

Mit anderen Worten, '* p ++' analysiert als '* (p ++)'. – melpomene

Verwandte Themen