<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 );


Anmelden zum Antworten