有机器(或编译器),在哪里sizeof(char) != 1?
C99标准是否说sizeof(char)标准合规性实施必须正好1?如果有,请给我部分编号和引文.
更新:
如果我有一台机器(CPU),它不能寻址字节(最小读取是4个字节,对齐),但只有4-s的字节(uint32_t),这个机器的编译器可以定义 sizeof(char)为4吗?sizeof(char)将是1,但char将有32位(CHAR_BIT宏)
Update2: 但是sizeof结果不是BYTES!这是CHAR的大小.char可以是2个字节,或者(可能是)7位?
Update3:
好的.所有机器都有sizeof(char) == 1.但机器有CHAR_BIT > 8什么?
我只是想知道你是否可以为我清理一些东西.
我们有一些示例代码来解释我的问题:
#include <stdio.h>
int main(void)
{
char test[100];
printf("%s",test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我没有完全弄错的话,这应该在我声明之前随机输出一些在此内存地址处的字符,如果在虚拟环境中它是空的,则应该输出.所以,这是我的理解.在我输入内容之前保存的内存被理解为char并写入终端.例如ascii'a'= 97 = 01100001.这就是它输出'a'的原因.可能是别的什么.或无.然后它停止了.
但是如果我把'a'放在第一个位置然后像这样打印:
test[0] = 'a'
printf("%s",test);
Run Code Online (Sandbox Code Playgroud)
它将输出'a',另外输出一些字符或什么都没有然后停止.
这就是我理解数组的方式:数组是指向第一个地址的指针,括号是在将数字乘以sizeof(type)后对地址进行解引用.
因此,在这种情况下,在第一个例子的内存中找到的随机01100001(Ascii'a')应该与第二个例子中故意放置的01100001(Ascii'a')的printf无法区分.然而,当我运行printf时,我没有得到100个随机输出.我得到一个.而且我不认为随机字段通常设置为'\ 0'.
这意味着,我的理解在某处肯定是错的.请帮我理解我犯错误的地方.