C Unterprogramm soll ein String ans Hauptprogramm zurückgeben
-
Wer kann mir helfen. Ich übergebe einen String an ein Unterprogramm. Folgendes Programm ruft dieses Unterprogramm auf.
#include <stdio.h>
struct konto
{
int ktnr;
char name[30];
char vname[30];
char str[30];
char plz[10];
char ort[30];
char land[30];
};struct order
{
char artnr[10];
char bez[30];
float anzahl;
struct konto kunde;
};char clear_crlf(char array)
{
int i;
for(i = 0; i < strlen(array); i++)
{
if ((array+i) == '\n')
*(array+i) = 0;
}
return array
}int main()
{
struct order o1;printf("Kundenprofil eingeben");
printf("\nName ");
fgets(o1.kunde.name,30,stdin);
printf("%s",clear_crlf(o1.kunde.name));
printf("Vorname ");
fgets(o1.kunde.vname,30,stdin);
printf("Strasse ");
fgets(o1.kunde.str,30,stdin);
printf("PLZ ");
fgets(o1.kunde.plz,10,stdin);
printf("Ort ");
fgets(o1.kunde.ort,30,stdin);
printf("Land ");
fgets(o1.kunde.land,30,stdin);
printf("\nOrder eingeben\nArtnr ");
fgets(o1.artnr,10,stdin);
printf("Artbez. ");
fgets(o1.bez,30,stdin);
printf("Anzahl ");
scanf("%4.2f",&o1.anzahl);
fflush(stdin);
printf("\n\n");
o1.kunde.ktnr = 1;
return 0;
}Ich übersetze das Programm und starte es wie unten angegeben, es kommt eine Warnung und das Programm stützt mit der Speicherzugriffsfehlermeldung ab.
frank@linux1:~/C++/übungen> cc -o struct.exe struct.c
struct.c: In function `clear_crlf':
struct.c:30: warning: return makes integer from pointer without a cast
frank@linux1:~/C++/übungen> struct.exe
Kundenprofil eingeben
Name Rumpf
SpeicherzugriffsfehlerWie übergebe ich das Array aus meinem Unterprogramm in mein main() -Programm?
-
char clear_crlf(char *array) // Sollte char * zurück geben und nicht char { int i; for(i = 0; i < strlen(array); i++) { if (*(array+i) == '\n') *(array+i) = 0; } return array }
Edit: Bitte benutze die Code/Cpp Tags. Danke
-
Vielen dank
Es funktioniert.
Es ist mir jetzt klar. Ich hoffe ich habe es richtig verstanden. Die Funktion gibt nicht einen char-Wert zurüch sondern den Zeiger auf den Array.MfG
Frank Rumpf
-
In der Zeile:
for(i = 0; i < strlen(array); i++)
gibts aber noch einen Fehler:
[C++ Warning] strukturen.c(34): W8012 Comparing signed and unsigned values
Was bedeutet, dies genau, denn wenn ich Namen eingebe bekomme ich bei diesem Programm Speicherfehlermeldung !
-
machste halt ein
unsigned int i
draus.
unsigned heisst, das es keine vorzeichen gibt (eine länge kann ja eh nicht negativ sein)
das muss natuerlich angegeben werden.
vielleicht nochaml in die c/c++ buddelkiste gucken?
-
Ich habe das Programm mit dem C-Compiler übersetzt da ich mich derzeit mit ANSI C beschäftige und bekomme keinen Fehler angezeigt.
Erfasst habe ich das Programm mit dem vi und mit cc -o text.exe test.c übersetzt und bekomme keinen Fehler. C++ und C sind zweich verschiedene Compiler.
-
Na klar sind das zwei verschiedene Sachen... Deinen letzten Satz verstehe ich jetzt nicht so richtig.