我有以下两个问题
给定这样的语句 char * str = "999999999999"; 编译器如何确定在堆栈上分配多少空间?
如何遍历 str 指向的内存并确定其中各个位的值?
"999999999999"
不在堆栈上。指针可能在堆栈上,编译器知道指针应该有多大。确实有一个空 "999999999999"
终止,让您知道它何时结束。
要遍历每一位,可能是这样的:
for(i=0; str[i]; i++) // str[i] will evaluate to false(0) when that character is the null
for(j=7; j>=0; j--)
printf("%d", (str[i] >> j) & 0x01)
但我更喜欢以十六进制表示而不是二进制来查看位,所以我只想
for(i=0; str[i]; i++)
print("%X ", str[i])
1) 在 C 中,字符串由设置为零的字节终止。因此,在您的示例中,将为该字符串分配 13 个字节 - 12 个字节用于 12 个 ascii 字符,1 个字节用于 '\0' 字符(NULL 终止符)。
2)您可以迭代它并包含一些按位算术:
for(i = 0; i < strlen(str); i++)
{
for(j = 7; j >= 0; j--)
printf("%d", (str[i] & (1 << j)) == 0 ? 0 : 1);
printf(" ");
}
是字符串文字,编译器可以看到文字并计算所需的空间+空终止符
str 是一个指针,它指向您枚举的字符数组中的第一个字符,就像您对任何数组一样。std 库提供了大量函数来帮助处理字符数组。