|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
[C & in generale] Confusione con \r, \n e new line.
Osservando la tabella ASCII mi chiedo se il \n è l'insieme di:
ritorno carrello + new line oppure no:
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
No \n corrisponde solo a LF.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
.. e allora come mai oltre a cambiare riga, si mette a scrivere tutto a sinistra?!
A pagina 258 (Appendice B) di "Il linguaggio C", ultima traduzione del libro di BW Kernighan; ISBN: 88-7192-200-X. Pare dire proprio: Ritorno Carrello + Fine Riga.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. Ultima modifica di Matrixbob : 05-03-2007 alle 18:36. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
In questo script ad esempio:
Codice:
ovText = "AviSynth Authors:"+chr(13)+ \ "----------------------------"+chr(13)+ \ "Ben Radiak Gould"+chr(13)+ \ "Klaus Post"+chr(13)+ \ "Richard Berg"+chr(13)+ \ "Dividee"+chr(13)+ \ "Ian Brabham"+chr(13)+ \ "David Pierre"+chr(13)+chr(13)+ \ "Thanks to:"+chr(13)+ \ "----------------------------"+chr(13)+ \ "Everyone contributing to the project,"+chr(13)+ \ "Doom9 & team, kwag, stickboy"+chr(13)+ \ "" #Genero clip vuoto bg della dimensione desiderata con colori YV12 #Colore dello sfondo: azzurro bg = BlankClip(length=750,width=384,height=288,pixel_type="yv12",fps=25,color=$336699) #Genero clip di report t_mask autoadattante con colori YV12 t_mask = MessageClip(ovText,384,288,true).converttoyv12().coloryuv(levels="tv->pc") #Genero clip vuoto t_blank con le proprietà di t_mask, ma di colore diverso #Colore del testo: argento t_blank = BlankClip(t_mask, color=$e0e0e0) #Uno strano overlay last = overlay(bg, t_blank, mode="blend", mask=t_mask) #Realizzano lo scroll?! last = frameevaluate(last, "ol_x_offset = 40") last = frameevaluate(last, "ol_y_offset = 256 - (current_frame)") fadeio(15) converttoyv12() return last
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
A parte gli scherzi, dipende da come viene implementato. Se apri un file scritto su unix (quindi solo con \n per i fine riga) con il notepad, vedi tutto su una riga. Se lo apri con il wordpad, viene visualizzato correttamente. Riguardo \r che va anche a capo, non ho mai osservato questo comportamento (almeno sotto linux).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
@Matrixbob, forse ciò che non sai è che i line terminators sono definiti diversamente nei tre principali sistemi operativi, o famiglie di:
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Quote:
Quel chr(13) è in ASCII il \r. Diciamo allora che il codice ASCII è quello che è, poi sarà l'applicazione che usiamo ad interpretarlo a suo modo il byte che trova?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Comunque la risposta è no: carriage return e line feed sono due codici diversi e con significato differente. Come ti è già stato risposto dagli altri, un "newline" è codificato in maniera differente sui vari S.O. Poi come mandare in output un newline dipende anche dal linguaggio usato. Ad esempio in "C" se metti un \n nella printf, ci pensa la funzione a mandare in output la sequenza di newline corretta per il sistema operativo. Quindi ad esempio: printf ("Ciao\n"); se compilato su DOS/Win manderà in output Ciao CR LF, se compilato su Linux manderà in output Ciao LF (e con CR sui Mac). Invece ad esempio con Java se fai: System.out.print ("Ciao\n"); manda in output sempre e solo un LF. Se si vuole mandare in output davvero un newline in modo portabile bisogna usare altri metodi (es. println oppure la proprietà "line.separator").
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
![]() Sempre e dovunque, Andbin.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
La sprintf mette nel buffer solo \n ma la printf su DOS\Win manda in output CR+LF. Questo è quanto ho visto su tutti i compilatori Win32 che ho sempre usato (VC++ e BCC per dirne due).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
giorni fa ho fatto questo programma:
Codice:
#include <windows.h>
INT main(VOID)
{
CONST TCHAR pszMessage[] = TEXT("Hello world!\n");
HANDLE hStdIn, hStdOut;
DWORD dwDummy;
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(hStdOut, pszMessage, sizeof(pszMessage) / sizeof(TCHAR) - 1, &dwDummy, NULL);
ReadConsole(hStdIn, &dwDummy, 1, &dwDummy, NULL);
return 0;
}
se hai veramente letto sorgenti di printf che lo fanno erano sorgenti scritti male. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Ehm direi che qui il confine tra compilatore/SO/applicazione diventa veramente sottile e sfumato.
Nell'appendice del libro sopra citato dice proprio LF+CR. Anche da qualche altra parte trovai che x evitare problemi si metteva \r\n. Ma non ricordo + bene il contesto in cui era. Nell'altro script language (AVISynth), nel ben mezzo di una stringa ci sbattono l'ASCII di \r. Ora dato che AVISynth è basato su C perchè fanno dei casini del genere gli autori?! Dalla versione 2.5.7 è stato inserito il \n. Alleluia.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
a) Cosa c'entra printf (standard) con WriteConsole (e simili, specifiche di Win32)?? b) Come faresti con printf a mandare in output un newline in modo "portabile"?? Codice:
#include <stdio.h>
int main (void)
{
printf ("Ciao\nProva");
return 0;
}
prova.exe > prova ![]() Quindi, secondo te?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Si che è così, non ricordavo che i Mac -- come al solito -- thinkasserto differentemente
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#19 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
Quote:
|
|||
|
|
|
|
|
#20 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Poi su Win32 che funzione nativa venga usata per mandare in output i caratteri non lo so .... Quello che so è che su Win32, quando la printf incontra un \n manda in output CR+LF. Quote:
"Ciao\nProva" è una stringa literal, nel caso tu non l'abbia notato. Vuol dire che nell'eseguibile è così come è, senza alcun carattere aggiuntivo (perché mai il compilatore dovrebbe aggiungere dei caratteri??). Cioè nell'eseguibile tra Ciao e Prova c'è il carattere 0Ah e basta. E questo varrebbe su qualunque altro S.O. È la printf che su DOS\Win quando trova un \n manda in output CR+LF.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:34.























