In C dient die Funktion main() als Einstiegspunkt des Programms und akzeptiert einen von zwei Signaturen:
int main(); int main(int argc, char* argv[]);
Alternativ hat Microsoft Erweiterungen eingeführt, um Unicode zu unterstützen Unterstützung:
int wmain(int argc, wchar_t* argv[]); int _tmain(int argc, char *argv[]);
Der Hauptunterschied zwischen _tmain() und main() liegt in ihrer Verwendung mit Unicode. Wenn Unicode aktiviert ist, wird _tmain() als wmain() kompiliert, sodass wchar_t-Zeichenfolgen verarbeitet werden können. Andernfalls wird standardmäßig main() verwendet.
In Ihrem Beispiel führt die Verwendung von _tmain() mit char*-Argumenten zu unerwartetem Verhalten, da die Zeichen unterschiedlich interpretiert werden. UTF-16, das von Windows verwendet wird, wenn Unicode aktiviert ist, stellt ASCII-Zeichen als Bytepaare dar, wobei auf den ASCII-Wert ein Nullbyte folgt.
Aufgrund der Little-Endian-Natur der x86-CPU sind diese Bytes werden vertauscht, was zum ASCII-Wert führt, gefolgt von einer Null (ein Nullbyte). Da Zeichenfolgen normalerweise durch Null-Bytes abgeschlossen werden, interpretiert Ihr Programm jedes Argument als Zeichenfolge mit einem einzelnen Zeichen.
Um dieses Problem zu beheben, haben Sie drei Möglichkeiten:
Bedenken Sie, dass diese Erweiterungen und Konzepte spezifisch für Microsoft sind und nicht Teil von Standard C .
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „_tmain()' und „main()' in C für die Unicode-Verarbeitung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!