<wchar.h> und fopen
-
Dieses programm soll aus einer textdatei unicodebilder auslesen und in eine *.c datei schreiben, wobei an jede zeile vorne ein wprintf(" und hinten ein \n");
angehängt wird!
Leider sagt visual studio 05 pro:
warning C4133: 'Funktion': Inkompatible Typen - von 'char [10]' zu 'const wchar_t *'
Das programm gibt nur Datei %s kann nicht zum lesen geöffnet werden! aus!
Kann mir jemand sagen ob es ein äquivalent zu fopen für wchar.h gibt?/*-----------------------------------------------------------ascii-to-c---------------------------------------------------*/ #include <stdio.h> #include <string.h> #include <wchar.h> #include <locale.h> //Für setlocale() //#include <conio.h> #define buffer_size 100000 //max. zeilenlänge /*-----------------------------------------------------------code--------------------------------------------------------*/ int code(void) { static wchar_t hilf_string[buffer_size], string[buffer_size], dateiname[100], cdateiname[100]; FILE *fz1, *fz2; //cls(); for(;;) //Dateinamen einlesen { wprintf(L"Dateiname:"); fgetws(dateiname, 100, stdin); dateiname[wcslen(dateiname)-1] = '\0'; //\n am ende entfernen! if(wcslen(dateiname) != 0) { break; } } if((fz1 = fopen(dateiname, "r")) == NULL) //Datei öffnen aus der gelesen werden soll { wprintf(L"Datei %s kann nicht zum lesen geöffnet werden!\n", dateiname); return(0); } else //Wenn diese geöffnet werden konnte { wcscpy(cdateiname, dateiname); //Neuen dateiname für die *.c datei festlegen cdateiname[wcslen(cdateiname)-4]='.'; // 4 wegen .txt cdateiname[wcslen(cdateiname)-3]='c'; cdateiname[wcslen(cdateiname)-2]='\0'; if((fz2 = fopen(cdateiname, "a")) == NULL) //Wenn diese nicht zum anhängen erstellt werden konnte { wprintf(L"Datei %s kann nicht zum anhängen geöffnet werden!\n", dateiname); return(0); } else //Wenn diese erstellt werden konnte { //printf("Datei %s wurde zum anhängen geöffnet!\n", dateiname); while(fgetws(hilf_string, buffer_size, fz1) != NULL) //fgets() ließt bis einschließlich \n so lange bis dateiende erreicht ist(fgets=NULL) { hilf_string[wcslen(hilf_string)-1] = '\0'; //\n am ende entfernen! //string = strdup("puts("); //fordert speicher für string an und schreibt "Beep(" in string wcscat(string, "wprintf(\""); wcscat(string, hilf_string); wcscat(string, "\");\n"); fputws(string, fz2); //schreibt die codezeile in die *.c datei } } } fflush(fz1); fflush(fz2); fclose(fz1); fclose(fz2); } /*-----------------------------------------------------------main--------------------------------------------------------*/ int main (void) { setlocale(LC_ALL, ""); //Damit auch umlaute angezeit werden können //Also zum Beispiel setlocale( LC_CTYPE, "de_DE.UTF-8" ) um die Einstellungen für die Wide-Character Funktionen auf deutsch mit UTF-8 Kodierung um zu stellen. //Gibt man einen leeren String an, so wird die gesetzte Umgebungsvariable verwendet. if(code()!=0) wprintf(L"Coded\n"); getchar(); return(0); }
Hier noch ein Beispielbild!
NHBBHHBBEHHHHHHHBHHBHHBBRBBBBBBBBHBBHHHBBBHBBBHBBBBHHREE#WDDWQQQ RENHBHNHRHHBHHHHBBHHHBHHHWh#ERBBHBBHBHHBBBBHBBBBBBBBR##RXQQDKDZD HHEEHHBBEHHBEBBHBHHHHHNL8ITCs5*NBBBHBHHHHHHBHHBHBHBN#KDFPZbPUqAZ NRNENRNRENNENBBBHHHHHNiw##REE#b%NRHHHHBHBHBBBHBHHHR#XQgAehepSZpd RNERRNNRRRNNNENRHNNNEb{#ERRRRENFxNRHHBBHBBBHHBBBHH#XFQxmGm8exgFA EEENRRNRNNNRRENENRERN7kEFOzwTXNRs#NERRHBHHHBBHBHBN#DPeO48m*hDZUA NNRERRNRRREERRRRENEEEzXn"_"""!]FFbRENNNRRHBBHBBHR#WQe8VYGxZhZFFP EENENNENNENEERRRRNENRhx'..,^^"~c#WRERENRNRHHBHHBE#XZh8GGexAZQFFF REREEERRNNNBEEERNENERpl :.,^^"!9NRREEEEBHBHHBBHNR#FgxbphexqDPPKX ENNRRNEEEERRRRRRNRNENXiIj¬~=~¬)8ENNHHHHBBBHBBBBE#XQPPheeSdQQFXX# NNERNRENERERRRERNEEREo)xEjF#Qx[4HENREEEEEHBHHERR##WFZbpqZZPPPKK# NRERRRRNENRENENEEENN#!^?)^J8F#*6RRRRERNNNNBRNN#E#DQPDQFUQFPWKWW# EREERENERNEERNNRERNRRt.<'^)¬?)38EPRNENBERNRERNN#XKFXDFDQDFPKX### RREENNENERREERRHERNE#!_7la*(!~[W#FNEEENN##ERNR##FXXXDKPXWQPX#### #NENNEERENENNERNEEEEN)=~Ih978y$PZ&ERERR#######W#QQWWKWWWXXX##### #RNENNENRNENRREE#kQRRy~+60wJ4086fXER#N######X#XXPFXK#WXWKKK##### NRNNNRNEENNRNERR%~|#NG+^!!(u3*FYK##N#NEEWXW###K#DQW####WWK###### EEN###N#ENREEER#lus#E#)=++wQpFxd#a#RW*Ob########KX#####XXW###### ERR##EE##RERRERW(lw##E+axbU0DX0&4"\~ii!^_a#############X######## ##EE#####RRREREg)Th##K^2######pYa";)?=t""`3N###E################ NRRN#####EREERRV)£*##+""aERN##x#+ie{!¬)|=`'l#REN#NR############# REER#####ERNRNRJ!?kQ~^""-kQE##ZXPgV{t"")\;`'o#NENER###########RE RN######NERRNEE~~++"!^^"'^|$zWW0EXwI53~^!'^^"DNEENE##########NNR NNNRE###ENRRRRW")v-:"~~?9}%hIu8h879su[Tz~"!^^\KRNEER########NEER RE#ER###RNER#o+^~|~^^-^"L^"7U(00+}|n&&6[~|=/^^"#EENNNR######EEEE NENRERE#RRNRr.."7+"..;.'f!"¬$0s2=+)t]zv~jft~"^^?NNRERR######RREE REEERENRNRN#~^^"=+!"!!'^=v_>!lY?~(==¬)rvi|29t^^^sNREEN###NR#NRNR RNNREERRNNNL;`^-IQcT$=^>~3!_"")=!=)=^"!f?{{7|7^^^qNENE###EENNRRB REERNEREEE#"^;¬~8#e6x=^"~v=!""|(>=)=^'~}[C%!]3u"'"WRRN###ueEENNH NRNRRRREREe''^!=DEEXQ~^/!|)+7!!¬\|?="¬~=~+il2CRD&*£4FEQx*~WEBHBB ENNNRREENEo`^"!)KRENK!^!)""_"(=""+i=~7<>!\=muWE#$£(++NK#bHBHHHHH NERNRENRNEc"}6yx#REN#GsG]Jf%7£]=^~)=)=;'">"7hNRF(~t!"iPNQBBBHRBH RNREEEHERE*n#NRN##RRREERdVemk8&(!=(=!7=.;"¬-£E#£j="tddEHBBBBR### ENEERRERNN#NHERE#NEHBRER#Pq2+ny?!~=!^^=!.;>\?Hi!~!VBBhNHBBBR#KN8 NEENRENRNEERERENEEHBBERRxSE#h[7=""=<,:.^\`^\!{tj#EQ2cGNBBBBRNH#* ERENRNNERRR#NE8EENBBHEN&C##9i!~=>;~~";:.'"`^([PES=~mKBWxYBHHBBBs HBHNHEERERRRHH(DRNHHBHROt##(!~)jt==="!":.:"9RWc!%bxG#NFsOHBBHEB# HHBEBREERNEREEtr#BHBBHEP+mRQt)1[?=7+¬^"^:;xHmtIAp*ucJEHNBBHBR]Rh BHHHHENNRBHPRE?$WNBHBR#EyJNNwCx5a&41FU=^"8#Z8#bC3Zh6#HBgRHBBm)3s BHBHBBERNHBHBH=|#EEEBEE#G7qEDUIl!(3Q#ER2&BH#EUz#*WHBBRXXRHHHCG%I RRHBHHNXhW##XF{~yENBBHH##ci5Exi!!=)#EN#b9HR4#HN8sTU#HNNBX#5PUX2s REBHBB8+i|}39j=|+FRBBHR#F{|)Qit[+sXRBR#pjNBBRE#hx#EHHQ3s%h}|5$t£ EREHH#i?((=)=====0FERN#XeG##RY3gEBEBHENNYbHBEEBNHHX7O#7=+(?+{f+t RNNBHhi+)~~~===~~~~!5ZU##8RNENERBBQHHE#B#[5NBHQJ*£PNNE#WdhUW##o% REEHB9()======~~~!~!zD####HNRHHHHBBHHEBN#YRBB#G#NRRNERRN#FV5pQn} NNRBH7??(())==6y~!!!iX##RBBRBHBBHNZGZGQ#R#m#Bs/RBNNRNNER2=====]+ ERNBN+?+tit?=2F#4!~+0#RREHEERHBHR4)IUh#NU[+iA~"hNRNENRRR~~====j{ NERENjlj+6C==F##D8Q#K#qNNEN##BBNPmeW#N#f?+|=!<"6RBREERNR#9[i==+r RRNNN[ji=as?=S###X##W###ENW##RERRQ#F##}|(==~~!"=EHNRNRERHHBBHBB@ EEENR+))=66=)S#ER####N#NEN##NEREBBBBX63£}?|=~>"^#ENNENEEBHHBHHBM RNEBB7?))l5itSENN#####RRNNREENNEHNBEQLYLv7?=="^^GHBNEHBRBB@BM@MM NERHH2)+){$viG#ER###VtNREREREEREHBE#KQVyr3(=~^^^{HBHHEBEHHH###BE NREEB6it?vl£(YbERW£|~~PNRNRERNEHE#Q##mYyw})="^^^!RBBHBBBBBBBHBHB NEENEki}t+)yijZPWQ?=~~&ERNRREENNKW#W#zGyJi=="^"'^U##EERREHM@MB## RRNEE8??+|s&|)2X#v====sERRERRRN##XFA#oOy6t=~""^^^yXQdD###BMMMM#R #RERRd|(|=LGvl7$%)(=~=uREENNN###KW#WK0a5$|?~!">"^?VhxhqDD#@HMM@@ #REEED)|==iUji|(?|====uRNREE#zSDhnzaXf]w|==!~!!^"¬8G0xxeeQ@BM@@@
-
Warum muss der Dateiname unbedingt wchar_t sein? Reicht nicht char aus?
-
naja unicode sieht besser aus bei kleinen bildern!
ich habs jetzt zumindest ablauffähig bekommen.
fopen kann keine dateinamen mit wchars öffnen bzw. finden.
leider ist die Ausgabe nicht das was ich erwartet habe!
vl. will es sich ja jemand ansehen.../*-----------------------------------------------------------ascii-to-c---------------------------------------------------*/ #include <stdio.h> #include <string.h> #include <wchar.h> #include <locale.h> //Für setlocale() //#include <conio.h> #define buffer_size 100000 //max. zeilenlänge /*-----------------------------------------------------------code--------------------------------------------------------*/ int code(void) { static wchar_t hilf_string[buffer_size], string[buffer_size]; char dateiname[100], cdateiname[100]; int status; FILE *fz1, *fz2; //cls(); for(;;) //Dateinamen einlesen { wprintf(L"Dateiname:"); fgets(dateiname, 100, stdin); dateiname[strlen(dateiname)-1] = '\0'; //\n am ende entfernen! if(strlen(dateiname) != 0) { break; } } if((fz1 = fopen(dateiname, "r")) == NULL) //Datei öffnen aus der gelesen werden soll { wprintf(L"Datei %s kann nicht zum lesen geöffnet werden!\n", dateiname); status=0; } else //Wenn diese geöffnet werden konnte { strcpy(cdateiname, dateiname); //Neuen dateiname für die *.c datei festlegen cdateiname[strlen(cdateiname)-4]='.'; // 4 wegen .txt cdateiname[strlen(cdateiname)-3]='c'; cdateiname[strlen(cdateiname)-2]='\0'; if((fz2 = fopen(cdateiname, "a")) == NULL) //Wenn diese nicht zum anhängen erstellt werden konnte { wprintf(L"Datei %s kann nicht zum anhängen geöffnet werden!\n", dateiname); status=0; } else //Wenn diese erstellt werden konnte { //printf("Datei %s wurde zum anhängen geöffnet!\n", dateiname); while(fgetws(hilf_string, buffer_size, fz1) != NULL) //fgets() ließt bis einschließlich \n so lange bis dateiende erreicht ist(fgets=NULL) { hilf_string[wcslen(hilf_string)-1] = '\0'; //\n am ende entfernen! //string = strdup("puts("); //fordert speicher für string an und schreibt "Beep(" in string wcscat(string, L"wprintf(L\""); wcscat(string, hilf_string); wcscat(string, L"\");\n"); fputws(string, fz2); //schreibt die codezeile in die *.c datei } status=1; } } fflush(fz1); fflush(fz2); fclose(fz1); fclose(fz2); return(status); } /*-----------------------------------------------------------main--------------------------------------------------------*/ int main (void) { setlocale(LC_ALL, ""); //Damit auch umlaute angezeit werden können //Also zum Beispiel setlocale( LC_CTYPE, "de_DE.UTF-8" ) um die Einstellungen für die Wide-Character Funktionen auf deutsch mit UTF-8 Kodierung um zu stellen. //Gibt man einen leeren String an, so wird die gesetzte Umgebungsvariable verwendet. if(code()!=0) wprintf(L"Coded\n"); getchar(); return(0); }
-
emme schrieb:
Kann mir jemand sagen ob es ein äquivalent zu fopen für wchar.h gibt?
hi, mein compiler kennt die hier:
FILE *_wfopen( const wchar_t *filename, const wchar_t *mode );