Problem bei strcpy
-
Hallo,
Ich habe eine Frage.
Wie kann ich einen Datensatz an die Position X speichern?strcpy(Ausgabe.Nr,"X");
Ich weiss nicht wie das geht, da so etwas in der Art ja nicht geht, oder?
strcpy(Ausgabe.Nr, "%c" , &blablabla);
Danke
-
ich check deine Frage nicht
vielleicht mal strncpy anschauen!
-
ich denke er meint sprintf
-
nein, ich will eine datei einlesen und den wert dann in "Ausgabe.Nr" speichern.
sieht etwa so aus:struct buch { char Ausgabe.Nr[200]; } int main() { struct Buch Ausgabe; /HIER WIRD DER WERT EINGELESEN/ strcpy(Ausgabe.Nr, "X"); printf("%s", Ausgabe.Nr) }
der Wert soll nun an die Stelle X gespeichert werden bzw. in den String Ausgabe.Nr
-
xarathus schrieb:
der Wert soll nun an die Stelle X gespeichert werden bzw. in den String Ausgabe.Nr
Dein "String" Ausgabe.Nr kann höchstens 1 Zeichen speichern, d. h. du kannst da nicht mal mehr das Stringendezeichen speichern.
Ein String ist in C eigentlich ein Char-Array. Ein Array ist einfach eine Anhäufung von Datentypen (=> Elemente des Arrays), die hintereinanderliegen.
Um nun aus Ausgabe.Nr einen richtigen String zu machen solltest du das in etwa so deklarieren:struct buch { char nr[20]; }
Die 20 in den [] gibt an wieviele Elemente dein Array hat, in dem Fall also 20. Bei Strings musst du auch immer das Stringendezeichen (0 oder '\0'; ist das gleiche :)) mit einberechnen, d. h. du kannst eigentlich nur 19 Zeichen speichern, da du das 20. für das Stringendezeichen brauchst.
-
habs vergessen, weiss das man die länge definieren muss, aber wie kann ich einen wert an diese position "X" speichern, oder den wert des stringes überschreiben?
-
hast du vielleicht probleme, die werte aus der datei in eine variable zu speichern?
poste vielleicht mal deinen ganzen code!
-
er ist logischerweise nicht fertig, ich will die daten einlesen (weiss ungefähr wie's geht) aber habe keinen schimmer, wie ich sie in die strings ablegen kann. überall wo die "X" sind, sollen die daten gespeichert werden. (habs hervorgehoben)
[cpp]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define MAX_CHAR_LENGTH 200
#define MAX_LINE_LENGTH 1024
#define MAX_BOOKS 200struct Buch
{
char LaufNr[MAX_CHAR_LENGTH];
char titel[MAX_CHAR_LENGTH];
char autor[MAX_CHAR_LENGTH];
char ISBN[MAX_CHAR_LENGTH];
char maxPages[MAX_CHAR_LENGTH];
};int main()
{
FILE *fp;
char zeile[255];
int n;
struct Buch TAusgabe, Ausgabe;
strcpy(TAusgabe.LaufNr,"Nr:");
strcpy(TAusgabe.titel,"titel:");
strcpy(TAusgabe.autor,"autor:");
strcpy(TAusgabe.ISBN,"ISBN:");
strcpy(TAusgabe.maxPages,"Pages:");strcpy(Ausgabe.LaufNr,"X");
strcpy(Ausgabe.titel,"X");
strcpy(Ausgabe.autor,"X");
strcpy(Ausgabe.ISBN,"X");
strcpy(Ausgabe.maxPages,"X");printf("%s ,%s ,%s ,%s, %s, %s ,%s ,%s ,%s, %s", TAusgabe.LaufNr, Ausgabe.LaufNr, TAusgabe.titel, Ausgabe.titel, TAusgabe.autor, Ausgabe.autor, TAusgabe.ISBN, Ausgabe.ISBN, TAusgabe.maxPages, Ausgabe.maxPages);
//MENU
while (n!=6)
{
printf("\n\nMENU\n\n1=Daten anzeigen\n2=Daten einlesen\n3=Daten aendern\n4=Daten speichern\n5=Neuer Datensatz\n6=Beenden\nIhre Wahl: ");
scanf("%i", &n);
switch(n){
case 1: printf("%s ,%s ,%s ,%s, %s", Ausgabe.LaufNr, Ausgabe.titel, Ausgabe.autor, Ausgabe.ISBN, Ausgabe.maxPages);
case 2: fp = fopen ("Aufgabe.txt", "r");
if (fp == NULL){printf("ERROR CHECK INPUT FILE"); return 1;}
case 3:
case 4:
case 5:
case 6:}}
}
[/cpp]
-
mach dir bewusst, welche anordnung deine daten in der datei haben und lies sie dann mit fgets() in einen string ein.
-
währe das sor richtig:
fgets(Ausgabe.LaufNr,200,fp);
oder wie lese ich sie in einen string rein?
EDIT:
Würde Ansonsten auch fscanf gehen?
fscanf(fp,"%[^\n]", &Ausgabe.LaufNr)
bin noch auf eine Frage gestossen, "%[^\n]" heisst bis Zeilenende, was muss ich setzten für "bis zum Kommata"?
-
sry, für doppelpost!
ja es geht!
weiss aber nun nicht, wie ich anstatt bis zum Zeilenendefscanf(fp, "%[^\0]", &Ausgabe.LaufNr);
nur bis zum Komma auslesen kann.