【发布时间】:2012-05-04 08:32:44
【问题描述】:
如果第一个字符串大于第二个字符串,我认为 strcmp 应该返回一个正数。但是这个程序
#include <stdio.h>
#include <string.h>
int main()
{
char A[] = "A";
char Aumlaut[] = "Ä";
printf("%i\n", A[0]);
printf("%i\n", Aumlaut[0]);
printf("%i\n", strcmp(A, Aumlaut));
return 0;
}
打印65、-61 和-1。
为什么?有什么我忽略的吗?
我想也许我保存为 UTF-8 的事实会影响事情。你知道,因为 Ä 由 2 个字符组成。但是保存为 8 位编码并确保字符串的长度都为 1 并没有帮助,最终结果是相同的。
我做错了什么?
在 32 位 Linux 下使用 GCC 4.3,以防万一。
【问题讨论】:
-
您使用了错误的格式说明符。尝试
%c以获得正确的结果。 -
@Philip 好的,那么您将如何在您的实现中显示字符已签名?
-
我不在乎。编辑:只要我在 2 的补码机器上。