14. december 2005 - 11:52
Der er
29 kommentarer og 1 løsning
C, commandline input
Jeg skal bruge commandline input til at gemme i fil! Programmet skal tage et input, og gemme det sidst i en binærfil. Eksempel: GemData "Dette skal gemmes" .... mit problem er at hvis jeg bruger argv[2] og gemmer til filen så står det der ikke "rigtigt"?? (ihvert fald ikke med ASCII nr.) Gemmer jeg istedet med en "hardcoced": char *tekst = "Dette skal gemmes"; så gemmes det med ascii i filen korrekt! Så hvem kan lave dette ?
Annonceindlæg fra Capgemini
14. december 2005 - 13:46
#1
du bliver nød til at vise noget mere kode ellers kunne man forestille sig følgende #include <fstream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { fstream out; out.open("C:\\Test.txt", ios.out); fstream * p_out; p_out = &out; *p_out << "Det er en test" <<endl; return 0; }
14. december 2005 - 14:25
#2
Følgende har jeg pillet ud (håber at alle #includes er med :) ) #include <stdio.h> #include <stdlib.h> void writetest(char *name) { FILE *fp; fp = fopen("binary.bin","r+"); fseek(fp,256,SEEK_SET); // write at some location in file... fwrite(&name,1,10,fp); // write fclose(fp); } int main(int argc, char *argv[]) { // commandline-input: argv[2] = "Hej 10char"; writetest(*argv[2]); } Efter dette skal der så gerne i filen på være de 10 chars (i ansii) på det ønskede sted.... men.. der står lidt andre værdier når jeg kigger i filen!
14. december 2005 - 15:34
#3
hvad står der helt præcsist i filen ? skal det ikke være writetest(argv[2]); ? (uden stjerne)
14. december 2005 - 16:05
#4
arne_v: Skriver jeg: writetest(argv[2]); Får følgende fejl i (bruger GCC): warning: passing arg 2 of `writetest' makes integer from pointer without a cast
14. december 2005 - 16:15
#5
Hvis jeg hardcoder teksten står der følgende i filen: "Hej 10char" Forsøger jeg at anvende argv[2] står der dette i filen: "Öí¿¿ "
14. december 2005 - 16:19
#6
Jeg giver op, jeg kan ikke engang få den til at skrive noget i filen! Det kan selvfølgelig være at ikke includes er med :) Jeg får debug assertion i fseek(...)
14. december 2005 - 16:20
#7
øh den fejl får jeg med stjernen men ikke uden på den kode som du har postet
14. december 2005 - 16:23
#8
mener du testpilot eller x4all_dk arne_v
14. december 2005 - 16:27
#9
Mystisk det virker skam fint for mig (hvis jeg lige retter main til): int main(int argc, char *argv[]) { // commandline-input: argv[2] = "Hej 10char"; writetest(argv[2]); return 0; } Og har en fil (binary.bin) med en vis størrelse, da fseek jo læser lidt frem i filen..
14. december 2005 - 16:28
#10
arne_v: Du har ret! * skal ikke med!
14. december 2005 - 16:30
#11
14:25:41
14. december 2005 - 16:33
#12
okay! Jeg har også fået den til at kører! Når du gemmer binært, bliver det så ikke gemt som ascii værdier ???? Hvad forventer du at der står i filen, når du sender "Hej 10char" i den
14. december 2005 - 16:37
#13
Jeg forventer at det gemmes som ascii værdier... men det gør det ikke! Hvis jeg hardcoded en 'char navn[10] = "Hej 10char";' så virker det fint, men ved brug af argv[2] så står der andre hex-værdier i filen end hvis jeg bruger den anden metode
14. december 2005 - 16:43
#14
jeg får samme værdier ligegyldigt hvilken metode jeg bruger med pointer 37ë‘| med char[11] 37ë‘|
14. december 2005 - 17:09
#15
Der skulle gerne stå :"Hej 10char" uanset hvilken måde der vælges, og det er det som jeg ikke kan finde ud af!
14. december 2005 - 17:24
#16
det skal der vel ikke stå i den binære fil! det er vel mere når man trækker indholdet ud igen
14. december 2005 - 17:30
#17
jo det skal stå filen. (så hvis jeg åbner den i en editor og se på indholdet, så kan jeg se "Hej 10char" står i den).
14. december 2005 - 17:31
#18
hvad er det for en editor du bruger
14. december 2005 - 17:37
#19
jeps, nu kan jeg se hvad der er galt! void writetest(char *name) { FILE *fp; char navn[11] = "Hej 10char"; fp = fopen("binary.bin","r+"); fseek(fp,256,SEEK_SET); // write at some location in file... fwrite(&navn,1,10,fp); // write fclose(fp); fp = fopen("binary2.bin", "r+"); fseek(fp, 256, SEEK_SET); fwrite(_strdup(name), 1, 10, fp); fclose(fp); }
14. december 2005 - 17:37
#20
har benyttet _strdup() laver en duplicat at det du har i pointeren og så gemmer den det rigtige ned
14. december 2005 - 17:52
#21
Hvilke includes har du med ? #include <string.h> og ? Jeg får nemlig en del fejl når jeg compiler!
14. december 2005 - 18:45
#23
jeg benytter #include <iostream> #include <tchar.h> #include <stdio.h> #include <stdlib.h>
14. december 2005 - 18:46
#24
men iostream, så virker det De andre er ikke nødvendige
14. december 2005 - 20:01
#25
har du fået det til at virke ??
15. december 2005 - 10:14
#26
Nu ved jeg hvad som driller mig, det er fordi du har anvendt et windows-only ting. _strdup <string.h> Win 98, Win Me, Win NT, Win 2000, Win XP Hmm.. kan man ikke lave den funktion i C ? (jeg compiler den på FreeBSD/Linux)
15. december 2005 - 10:23
#27
tja det ved jeg så ikke! Men det funktionen gør er jo bare at kopiere pointerens indhold! har du mulighed for at benytte <string.h> eller noget lignedne jeg er ikke vant til at programmere i Linux!
15. december 2005 - 10:31
#28
char * tmp = name; fwrite(tmp, 1, 10, fp); DEtte vil jeg mene virker
15. december 2005 - 11:26
#29
YeS! Mange tak testpilot_dk
15. december 2005 - 11:30
#30
Det var så lidt :)
Kurser inden for grundlæggende programmering