M
Hallo reeporter,
du hast in deinem Programm einige Fehler gemacht.
Es ist mit Sicherheit sinnvoller, dir deine Fehler
aufzuzeigen, aber ich habe mich entschieden, deinen
Code so umzuschreiben, dass er funktioniert.
Ich hoffe, du lernst aus dem neuen Code.
Vielleicht solltest du dir mal in einem guten Buch
die Kapitel Pointer und Pointerarithmetik anschauen.
Hier nun der verbesserte Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sternchen(char*,char*);
int zeilenbestimmen(char const*);
void header(char*);
void footer(char*);
void printContent(char *, char const*, int);
int main (void){
char * cCommentDes = malloc(1300);
char * cCommentSou = malloc(1300);
char * cEndString;
int Zeilen;
memset(cCommentSou, 0x0, 1300);
memset(cCommentDes, 0x0, 1300);
cEndString = NULL;
sprintf(cCommentSou, "Kommentar Etwas laenger so dass es laenger wird in der laenge fghfgh sso fort ich BILL Gates Anwalt ruft Bill an sagt Das Recht hat gesiegt BILL Antwortet Verdammte Scheisse wir gehen in Berufung");
/* Anzahl der Zeilen bestimmen */
Zeilen = zeilenbestimmen(cCommentSou);
cEndString = malloc(sizeof(char)*Zeilen*81 +1);
memset(cEndString, 0x0, Zeilen*81+1);
header(cEndString);
printContent(cEndString, cCommentSou, Zeilen);
footer(cEndString);
puts(cEndString);
free(cCommentDes);
free(cCommentSou);
free(cEndString);
return 0;
}
int zeilenbestimmen(char const * cCommentDes)
{
int Zeilen = 2 ; /*Zeilenanzahl auf 2 Setzen fuer Header und footer */
/* Die Anzahl der Zeichen in einer Zeile sind 58 Zeichen*/
Zeilen += strlen(cCommentDes)/56;
/* Hier wird geprueft ob noch eine Zeile hinzugefuegt werden muss */
if (strlen(cCommentDes) % 56 >0) Zeilen++;
return Zeilen;
}
void header(char*CommentDes)
{
int i;
for(i=0;i<10;i++) *(CommentDes++) = ' ';
*(CommentDes++) = '/';
for(i=0;i<59;i++) *(CommentDes++) = '*';
for(i=0;i<10;i++) *(CommentDes++) = ' ';
*(CommentDes++) = '\n';
}
void footer(char*CommentDes)
{
int i; /* hier ist das Selbe wie im Header nur andersrum */
CommentDes = CommentDes+strlen(CommentDes);
for(i=0;i<10;i++) *(CommentDes++) = ' ';
for(i=0;i<59;i++) *(CommentDes++) = '*';
*(CommentDes++) = '/';
for(i=0;i<10;i++) *(CommentDes++) = ' ';
*(CommentDes++) = '\n';
}
void printContent(char *CommentDes, char const* CommentSou, int zeilen)
{
char *temp;
int i, j;
unsigned int len = strlen(CommentSou);
temp = CommentDes+81;
for (i=0; i<zeilen-2; ++i) {
sprintf(temp, " * ");
temp += 12;
for (j=0; j<56; ++j) {
if (len) {
*(temp++) = *(CommentSou++);
len--;
} else {
*(temp++) = ' ';
}
}
sprintf(temp, " * \n");
temp += 13;
}
}
Und hier noch das Ergebnis:
/***********************************************************
* Kommentar Etwas laenger so dass es laenger wird in der l *
* aenge fghfgh sso fort ich BILL Gates Anwalt ruft Bill a *
* n sagt Das Recht hat gesiegt BILL Antwortet Verdammte Sc *
* heisse wir gehen in Berufung *
***********************************************************/
Ich habe nun auch am Ende jeder Zeile 10 Leerzeichen eingefügt. Das
brauchst du nicht unbedingt, aber hat mir das Leben hier gerade
einfacher gemacht.
Und die Größe der Strings mit 1300 muss auch noch angepasst werden.
Viel Spass damit
mcr