frage zu printf mit format %c
-
Hast du das Problem auch mit?
char s[]="Text";
Hab ja gerade eben auch den Unterschied zwischen "char *String" und "char String[]" gelernt. Vllt. ist es nur mit cast möglich auf den read-only Bereich zuzugreifen.
-
s sollte ein char const * sein, und main muss int zurückgeben, aber beides sollte sich nicht so auswirken. Ich war auch der Meinung, dass gcc vor letzterem mal ungefragt gewarnt hätte; mittlerweile scheint das nur noch mit -Wall der Fall zu sein (es ist generell eine gute Angewohnheit, gcc mindestens -Wall -Wextra mitzugeben). Ob ein Zeiger oder ein Array verwendet wird, ist in diesem Fall herzlich gleichgültig, und das Lesen von Konstanten ist generell unkritisch.
Ansonsten ist der ähnlichste Compiler, den ich gerade zur Hand habe
$ gcc-4.5 --version gcc-4.5 (Debian 4.5.3-9) 4.5.3 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Damit habe ich, wenn ich obrigen Code nehme und das "(char)" entferne, das selbe Verhalten wie mit dem Cast. Ich vermute, dass es sich um einen Tippfehler handelt. Bitte stell mal den Code hier rein, mit dem du den Fehler kriegst.
-
Oh oh ... bei mir ist der Fehler auch weg.
Komischerweise funktioniert das jetzt auch ohne type-cast nach (char)Blöd, dass ich euch umsonst genervt hab.
Aber dennoch danke für die tipps.
main werde ich selbstverständlich void wegnehmen ... und zu int machen.
dem ggc -wall mitzugeben - ist sicher nicht die schlechteste idee, danke
( ich hab vor 20Jahren mal C gelernt ... es kaum oder besser nie gebraucht -
und befasse mich nun wieder damit, nachdem ich nen java-kurs besucht hab und
meine damaliges vorurteil: interpretersprachen sind was für lehrer, sich
neu bestätigt hat)
-
Neuling_Soonwald schrieb:
interpretersprachen sind was für lehrer, sich
neu bestätigt hat)
Dann schau dir mal Perl an.
So (unübersichtlich) wie du dein Programm geschrieben hast, wirst du deine Freude daran haben.
-
DirkB schrieb:
Neuling_Soonwald schrieb:
interpretersprachen sind was für lehrer, sich
neu bestätigt hat)
Dann schau dir mal Perl an.
So (unübersichtlich) wie du dein Programm geschrieben hast, wirst du deine Freude daran haben.
och ..in perl hab ich schon einiges gemacht ... sogar erfolgreich
-
Neuling_Soonwald schrieb:
dem ggc -wall mitzugeben - ist sicher nicht die schlechteste idee, danke
Vorsicht, die Optionen sind case-sensitive. Das muss -Wall heißen (mit großen W). Persönlich benutze ich immer -Wall -Wextra -pedantic und manchmal auch -ansi dazu (wenn ich C99 nicht verwenden kann. Das ist bei Code der Fall, der plattformunabhängig sein muss, weil MSVC bis heute kein C99 beherrscht) und achte darauf, dass ich mit diesen Einstellungen keine Warnungen kriege.
Ansonsten muss man auch in C nicht alles in einer Zeile machen, und es ist oft übersichtlicher, wenn man es sein lässt. Im konkreten Fall hätte ich das beispielsweise etwa so geschrieben:
#include <stdio.h> int main(void) { char const *s = "Das ist ein Textstring "; int i; for(i = printf("%s", s) - 1; i >= 0; --i) { putchar(s[i]); } return 0; }
-
/* -Wall -Wextra -pedantic ( -ansi ) */
werde ich mir jedenfalls merken .. Thx
noch ne frage zu "const" ... ich meine, es ist schon klar, dass ne Variable deren Inhalt sich im Progr. nicht ändert eine Konstante sein kann ...
Aber hat es ausser kosmetischen Gründen auch praktische Vorteile?
-
Neuling_Soonwald schrieb:
/* -Wall -Wextra -pedantic ( -ansi ) */
werde ich mir jedenfalls merken .. Thx
noch ne frage zu "const" ... ich meine, es ist schon klar, dass ne Variable deren Inhalt sich im Progr. nicht ändert eine Konstante sein kann ...
Aber hat es ausser kosmetischen Gründen auch praktische Vorteile?
Es hilft dir, Fehler zu vermeiden. Ist das nicht Vorteil genug?
-
Jedes mal, wenn eine Konstante einem Zeiger auf Variablen zugewiesen wird, tötet Algorithmos, der Gott der Programmierung, ein niedliches Kätzchen auf unnötig grausame Weise.
-
seldon schrieb:
Jedes mal, wenn eine Konstante einem Zeiger auf Variablen zugewiesen wird, tötet Algorithmos, der Gott der Programmierung, ein niedliches Kätzchen auf unnötig grausame Weise.
Du mimmst keine Drogen, oder?