2013-05-27 4 views
11

Ich arbeite mit Zeichenfolgen.veraltete Konvertierung von String-Konstante zu 'char *' in c

Immer, wenn ich führen Sie das folgende Programm, das ich einen Fehler als veraltet Konvertierung erhalten von String-Konstante zu ‚char‘ in c * auf der Linie char *p = "hello"

Was mache ich falsch?

Was bedeutet dieser Fehler? Wie kann ich es korrigieren?

Mein Code ist:

#include<stdio.h> 
int main() 
{ 
    char *p = "hello"; 
    printf("%s",p+1); 
    return 0; 
} 
+2

Fehler nicht, aber ... werden Warnung, weil Stringliterale sind 'char const *' Typen –

+1

const char * p = "Hallo" –

+0

@ user2227862 Lesen Sie auch dies: http://en.wikipedia.org/wiki/Const-korrektheit –

Antwort

16

Dies ist eine Warnung sein sollte (obwohl Sie Ihren Compiler festgelegt haben Warnungen als Fehler zu behandeln, das ist oft eine gute Idee).

Was Sie wollen, ist: char const *p = "hello"; statt.

Der Versuch, ein Zeichenfolgenliteral zu ändern, führt zu undefiniertem Verhalten. Die const verhindert, dass Sie das versehentlich tun (d. H. Code, der versucht, über den Zeiger zu schreiben, wird nicht kompiliert, es sei denn, Sie entfernen das const Qualifikationsmerkmal, z. B. mit einem Cast).

5

Dies ist eine Warnung, weil "Hallo" String eine Konstante ist und Sie versuchen, das in nicht const Char * zu speichern. Slove das Problem entweder machen es

const char* p = "Hello" oder char[] p = "Hello"

+0

nicht 'const char * p' aber' char const * p' irgendein Compoler kann dir Waring geben für 'const char *' –

+4

@GrijeshChauhan: Ein Compiler * könnte * eine Warnung für fast jeden (oder keinen) Grund erzeugen, aber ich Wäre ein wenig überrascht, wenn man "const" vor dem Typ statt nach dem setzen würde. Der Standard verlangt, dass beide akzeptiert werden. –

+1

@GrijeshChauhan können Sie plz angeben, welcher Compiler. Weil const char und char const beide gleich sind, denke ich – Daemon

Verwandte Themen