相关疑难解决方法(0)

有机器,sizeof(char)!= 1,或者至少CHAR_BIT> 8?

有机器(或编译器),在哪里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什么?

c standards sizeof c99 char

90
推荐指数
3
解决办法
2万
查看次数

如果没有\ 0,c的printf函数如何知道如何停止?

我只是想知道你是否可以为我清理一些东西.

我们有一些示例代码来解释我的问题:

#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'.

这意味着,我的理解在某处肯定是错的.请帮我理解我犯错误的地方.

c

1
推荐指数
1
解决办法
101
查看次数

标签 统计

c ×2

c99 ×1

char ×1

sizeof ×1

standards ×1