为什么char * str =“any”总是大小为8?

时间:2014-10-28 22:52:56

标签: c arrays string char byte

我正在使用sprintf进行测试,将int转换为string / char并注意到一些事情:

  1. 当我像这样string
  2. char *str = "anything";

    无论我在其中写什么,sizeof总是返回8字节的值。 但据我所知,char通常是1字节的大小,那么为什么字符串/数组中的字符数不会改变它的大小呢?

    如果我写

    char str[15];

    我得到15个字节的大小,所以如果我输入

    ,为什么我的大小不会达到15个字节
    char *str = "11111111111111\0"
    

    但大小为8个字节?

    1. 与此类似,如果我输入
    2. char str[] = {"67"}

      sizeof返回3字节的值,这是有道理的,因为它是6,7和\ 0。 然后我写这个

      int aInt = 368;
      sprintf(str, "%d", aInt);
      

      int aInt 368转换为字符串并将该字符串写入str。 这些是char然后,因此,sizeof应返回4字节的值,计数为\ 0 in。 但它仍然会返回1,即使我写了3个字符。

      有人可以向我解释一下吗?

      这是我用来测试这段代码的代码:

      #include <stdio.h>
      
      int main(int argc, char *arfv[])
      {
      
          int aInt = 368;
      
          printf("value of aInt: %d\n", aInt);
      
          char str[15];
          //Other ways of creating a string/array which were tested:
          //char *str = "anything";
          //char str[] = {"67"};
      
          //printf("value of str before: %s\n", str); //value of str before converting
      
          printf("size of str before: %ld\n", sizeof(str)); //size of str before converting
      
          sprintf(str, "%d", aInt); //convert aInt into a string
      
          printf("value of str after: %s\n", str); //value of str after converting
      
          printf("size of str after: %ld\n", sizeof(str)); //size of str after converting
      
          return 0;
      }
      

2 个答案:

答案 0 :(得分:7)

char*只是指向某个内存的指针,其大小与架构上的指针无关(8个字节表示64位架构,4个字节表示32位)。 / p>

由于指针没有传达有关它们指向的分配大小的信息,sizeof将不会评估分配的大小,它只会告诉你指针的大小是多少。此外,请注意sizeof编译时构造;它的值在编译时完全评估。

char *ptr = "1234567890";
char str[10] = "12345";
int numbers[10];
  • sizeof(ptr)评估指针的大小。该值通常为4(32位)或8(64位)。
  • sizeof(*ptr)评估char的大小。 (1)
  • sizeof(str)评估数组的大小。 (它的大小为10个字节,即使只分配了6个字节。)
  • sizeof(numbers)将评估为sizeof(int) * 10

答案 1 :(得分:2)

sizeof为您提供存储给定类型值所需的字节数。对于char *,这通常是4或8个字节。 char *可以存储内存地址,您可能会找到char。这个地址有多少char个?如果这些char编码一个C字符串,那么您可以使用strlen来获取字符串的长度。