【问题标题】:What does char word[100] mean in Cchar word[100] 在 C 中是什么意思
【发布时间】:2017-10-31 04:26:36
【问题描述】:

char word[100]; 在 C 中是什么意思。我假设这意味着它将字符限制设置为 100。不过我仍然不确定。

【问题讨论】:

  • 没有。仅 99 @YashKaranke
  • 有了这个声明,编译器分配了一个正好 100 个字节的数组,你可以使用word[x] 对它们中的每一个做任何你想做的事情。
  • 我们希望您在此处提出问题之前先进行自己的研究。这个问题的答案可以在每本 C 教科书和大多数 C 入门教程中找到。
  • @YashKaranke 不包括 100,它的长度是 100,即 0 到 99。
  • @YashKaranke,尝试重新阅读您刚刚写的内容。如果 100 是数组中的字符数 -- 它是 -- 那么数组中的字符数是 100。字符数决定了哪些索引值是有效的,而不是相反。

标签: c string char


【解决方案1】:

此声明将word 创建为char 的100 元素数组:

      +---+
word: |   | word[0]
      +---+
      |   | word[1]
      +---+
      |   | word[2]
      +---+
       ...  
      +---+
      |   | word[99]
      +---+

每个word[i] 存储一个char 值。在 C 中,数组从 0 开始索引,因此对于 N 元素数组,有效索引的范围是 0 到 N-1。您可以在word(元素0 到98)中存储最多 99 个字符的字符串,为字符串终止符留出1 个元素。当然,您也可以存储较短的字符串:

  0   1   2   3   4   5   6   7       99
+---+---+---+---+---+---+---+---+   +---+
|'H'|'e'|'l'|'l'|'o'| 0 | ? | ? |...| ? |
+---+---+---+---+---+---+---+---+   +---+

您还可以将多个字符串存储在一个数组中:

  0   1   2   3   4   5   6   7   8   9   10  11      99
+---+---+---+---+---+---+---+---+---+---+---+---+   +---+
|'H'|'e'|'l'|'l'|'o'| 0 |'W'|'o'|'r'|'l'|'d'| 0 |...| ? | 
+---+---+---+---+---+---+---+---+---+---+---+---+   +---+

或者,您可以存储 100 个的字符组成一个字符串1

C 声明语法有些复杂——对象的类型由声明说明符(类型说明符、类型限定符、对齐说明符等)和声明符。

在声明中

char word[100];

char 是类型说明符,word[100] 是声明符。 word 的“数组”被指定为声明符的一部分——如果我们更改类型说明符:

int word[100];

我们现在有一个包含 100 个元素的数组 int

数组性、指针性和函数性都在声明器中指定:

T a[N]; // a is an N-element array of T
T *p;   // p is a pointer to T
T f();  // f is a function returning T

其中T 代表类型说明符和限定符的某种组合。数组、指针和函数可以组合成任意复杂的类型:

T *a[N];      // a is an N-element array of pointers to T
T (*a)[N];    // a is a pointer to an N-element array of T
T *(*f())[N]; // f is a function returning a pointer to an N-element array of
              // pointers to T

等等。


  1. 要么是因为你没有存储一个 0 值字符,要么是因为你存储了多个不标记任何结束的 0 值字符。

【讨论】:

    【解决方案2】:

    char word[100] 创建一个chars 数组,类似于int word[100] 创建一个ints 数组。 这个字符数组将允许您存储从索引 0 到 99 的 100 个字符。

    【讨论】:

    • @Michi,消除了措辞的歧义。
    • @ikegami 同意,但应该更正。哦,我明白了,你自己做的。 SO允许你这样做吗?
    【解决方案3】:

    word[100] 是一个字符串(char 数据类型的数组)。但是C中的字符串有点 不同于普通数组。字符串末尾将有一个空字符 ('\0')。所以word[100] 可以包含来自您输入的 99 个字符,这些字符将从 0 开始索引 - 98 和一个空字符将被放置在索引号 99 中。

    【讨论】:

    • 它可以用来存储一个以 NUL 结尾的字符串,但这远非必要。
    • char 的数组不是字符串 - word 可能包含一个字符串,或者它可能包含多个字符串,或者它可能包含一系列字符值,它们组成一个字符串,等等。
    • @Manny_Mar,你错了。再次阅读我写的关于索引的内容。
    • @John Bode 请您阅读这篇文章并发表评论吗? :tutorialspoint.com/cprogramming/c_strings.htm
    • @Najat:措辞有点误导。根据C Language Standard, 7.1.1/1:“string 是由第一个空字符终止并包括第一个空字符的连续字符序列。”所有字符串都存储char的数组中(或wchar_t对于宽字符串),但并非所有char的数组都包含字符串。
    猜你喜欢
    • 2019-10-17
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多