malloc
-
David_pb schrieb:
Du musst p[ 5 ] = '\0' setzten, das C weis wo der String endet.
p[4]
-
David_pb schrieb:
Du musst p[ 5 ] = '\0' setzten, das C weis wo der String endet.
Aber das Array dann auch 1 Zeichen länger machen, sonst wird über das Ende hinausgeschrieben.
David_pb schrieb:
sizeof( char ) ist mitnichten immer eins
6.5.3.4 The sizeof operator
[...]
When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.
-
#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { char *p; p = (char*)malloc(5 * sizeof(char)); for(int i = 0; i < 5; i++) { p[i] = '-'; } printf("%.5s\n", p); return 0; }
-
Wenn schon die Länge bestimmen, dann auch den richtigen Formatmodifizierer verwenden.
printf("%.5s\n", p);
-
-
groovemaster schrieb:
Wenn schon die Länge bestimmen, dann auch den richtigen Formatmodifizierer verwenden.
printf("%.5s\n", p);
Bei mir klappt beides...
-
#include <stdio.h> #include <stdlib.h> void main() { char *p; p = (char*)malloc((5 + 1) * sizeof(char)); for(int i = 0; i < 5; i++) { p[i] = '-'; if(i == 4) { p[i+1] = '\0'; } } printf("%s\n", p); }
so ist das doch am schoensten programmiert
-
omg, so viel gefrickel...
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int len = 5; char *p = malloc(len+1); if (!p) return 1; memset(p, '-', len); p[len] = 0; puts(p); return 0; }
-
ProgChild schrieb:
Bei mir klappt beides...
Was klappt und was korrekt ist, sind immer noch zwei verschiedene Sachen. Und korrekt ist nur %.5s. Bei %5s wird lediglich eine Mindestlänge der Ausgabe festgelegt. Das undefinierte Verhalten wird damit im besagten Fall aber nicht beseitigt, da der String nicht abgeschnitten wird. Alles was bei dir also klappt, ist undefiniertes Verhalten.
-
groovemaster schrieb:
ProgChild schrieb:
Bei mir klappt beides...
Was klappt und was korrekt ist, sind immer noch zwei verschiedene Sachen. Und korrekt ist nur %.5s. Bei %5s wird lediglich eine Mindestlänge der Ausgabe festgelegt. Das undefinierte Verhalten wird damit im besagten Fall aber nicht beseitigt, da der String nicht abgeschnitten wird. Alles was bei dir also klappt, ist undefiniertes Verhalten.
Hast recht, habs eben nachgelesen. Dummerweise steht es im Buch "C von A bis Z" falsch drinn...