2

我有以下两个问题

  1. 给定这样的语句 char * str = "999999999999"; 编译器如何确定在堆栈上分配多少空间?

  2. 如何遍历 str 指向的内存并确定其中各个位的值?

4

3 回答 3

4
  1. "999999999999"不在堆栈上。指针可能在堆栈上,编译器知道指针应该有多大。确实有一个空 "999999999999"终止,让您知道它何时结束。

  2. 要遍历每一位,可能是这样的:

    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])
    
于 2013-04-10T15:56:43.510 回答
1

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(" ");
}
于 2013-04-10T15:58:45.870 回答
0
  1. 是字符串文字,编译器可以看到文字并计算所需的空间+空终止符

  2. str 是一个指针,它指向您枚举的字符数组中的第一个字符,就像您对任何数组一样。std 库提供了大量函数来帮助处理字符数组。

于 2013-04-10T15:57:21.753 回答