Kar*_*uru 9 c operating-system char
我有一个基于以下程序的查询 -
char ch;
ch = 'z';
while(ch >= 'a')
{
printf("char is %c and the value is %d\n", ch, ch);
ch = ch-1;
}
Run Code Online (Sandbox Code Playgroud)
为什么在上述程序中不保证打印整套小写字母.如果C对内部形式的字符排序没有多少保证,那么实际上是谁以及如何做?
pax*_*blo 17
编译器实现者选择其基础字符集.关于标准唯一要说的是必须有一定数量的字符,并且数字字符是连续的.
用于C99的执行环境所要求的字符是A通过Z,a通过z,0通过9(必须是在一起并且按顺序),任何的!"#%&'()*+,-./:;<=>?[\]^_{|}~,空间,水平制表符,垂直制表,换页,警报,退格,回车和换行.这在当前的C1x草案中保持不变,这是该标准的下一次迭代.
其他一切都取决于实施.
例如,代码如:
int isUpperAlpha(char c) {
return (c >= 'A') && (c <= 'Z');
}
Run Code Online (Sandbox Code Playgroud)
将在使用EBCDIC的主机上中断,将大写字符分成两个区域.
真正可移植的代码将考虑到这一点.所有其他代码应记录其依赖项.
您的示例的更便携式实现将类似于:
static char chrs[] = "zyxwvutsrqponmlkjihgfedcba";
char *pCh = chrs;
while (*pCh != 0) {
printf ("char is %c and the value is %d\n", *pCh, *pCh);
pCh++;
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个真正的可移植解决方案,你可能应该使用,islower()因为只检查拉丁字符的代码将无法移植到(例如)希腊语,使用Unicode作为其基础字符集.
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |