c/c++语言开发共享C中的空字节和数组

如果我声明一个像10个字符的字符数组那么…

char letters[10]; 

我是否创建了一组内存位置,从索引0-9表示为字符,然后第10个索引是空字节?

若是这样意味着我真的在内存中为数组创建11个位置(0到10),最后一个元素是空字节,或者我在内存中有10个位置(0到9)然后C在空格中添加空字节一个新的位置(所以数组比我声明的长1个字节)?

谢谢

    好像你和数组和字符串混淆了。
    当你申报时

     char letters[10] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; 

    然后它在内存位置只保留10个连续字节。

      2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 //memory addresses. I assumed it is to be starting from 2000 for simplification. +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ | | | | | | | | | | | | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | | | | | | | | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 

    在C索引中从0开始。 您可以从letters[0]letters[9]访问分配的内存位置。 访问位置letters[10]将调用未定义的行为 。 但是当你宣布这样的时候

     char *letters = "0123456789"; 

    要么

     char letters[11] = "0123456789"; 

    然后在内存中分配11个字节的空间; 10表示0123456789 ,一个表示 (NUL字符)。

      2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 //memory addresses. I assumed it is to be starting from 2000 for simplification. +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+ | | | | | | | | | | | | | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '' | | | | | | | | | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+ ^ | NUL character 

    举另一个例子

     #include  int main(){ char arr[11]; scanf("%s", arr); printf("%s", arr); return 0; } 

    输入:

     asdf 

    输出:

     asdf 

    现在来看看内存位置

      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+ | | | | | | | | | | | | | 'a' | 's' | 'd' | 'f' |'' | | | | | | | | | | | | | | | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+ 

    我是否创建了一组内存位置,表示为索引0-9中的字符

    那么第10个索引是空字节?

    没有。

    你预留了10个char的空间。 没有其他的。 没有什么会自动将最后一个字节设置为零,或者就像它一样。 没有第11个字符可以容纳零,你只有10个。

    如果您打算将其与字符串函数一起使用,那么作为程序员,您有责任确保您的字符串以空值终止。 (这意味着它最多可以容纳9个重要字符。)

    初始化的一些常见示例:

     // 10 chars exactly, not initialized - you have to take care of everything char arr1[10]; // 10 chars exactly, all initialized - last 7 to zero - ok "C string" char arr2[10] = { 'a', 'b', 'c' }; // three chars exactly, initialized to a, b and c - not a "C string" char arr3[] = { 'a', 'b', 'c' }; // four chars exactly, initizalized to a, b, c and zero - ok "C string" char arr4[] = "abc"; 

    在[Turbo(C ++)的编程中,尝试使用F7,或者F8和Alt + F4,你可以看到内部发生的事情对于有这样疑虑的初学者会非常有用

    当你声明一个变量时,一个单独的内存位置将被分配给该变量。 在数组变量的情况下

     char letters[10]; 

    十个内存空间将分配给字母变量。

    并且内存分配的大小将因不同的数据类型而异(即int,char,float …)。

    再次在你的情况下:如果你想在数组中存储像“csstudent”这样的名称你声明一个数组大小为“十”甚至“csstudent”大小是“九”,因为最后一个索引是存储“ 0”字符表示字符串的结尾

    // 1000,1001是分配的内存空间,可能会因系统而异

    需要了解更多c/c++开发分享C中的空字节和数组,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 +-----+-----+-----+-----+-----+-----+-----+-----+-----+------+ | | | | | | | | | | | | 'c' | 's' | 's' | 't' | 'u' | 'd' | 'e' | 'n' | 't' | '' | | | | | | | | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+-----+------+ 

      以上就是c/c++开发分享C中的空字节和数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享C中的空字节和数组

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979373.html

      (0)
      上一篇 2021年12月12日 下午8:06
      下一篇 2021年12月12日 下午8:07

      精彩推荐