为什么我只看到第一个角色

时间:2018-06-25 16:31:35

标签: c

问题:

我知道我应该使用字符数组,但是字符数据将作为它们相应的数值存储在其中;因此,我们可以说 int数组字符数组相同,唯一的区别是;通常字符使用 1个字节,而int使用 4个字节

我的问题:

我有一个int数组;我正在将数据存储到该数组中,但是当我尝试使用 printf和%s 打印该数组时,它仅从该数组中打印第一个字符

%s printf 一起使用时,它将搜索空字符,即 \ 0 ,以了解位置停止。在我的代码中,我将 / 0 明确地放在字符串的末尾。

代码(已编辑)

/* Write a program to print all input lines that are longer than 80
characters. */

    #include <stdio.h>
    #define MAXCHAR 80
    #define LINES   1000

    int main() {
        int i, c = 0;
        int data[LINES]; 

        while(c != EOF) {
            for(i = 0; i < LINES - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
                data[i] = c;
            printf("Value of i after for = %d\n",i );

            if(c == '\n') {
                data[i] = c;
                ++i;
            }
            data[i] = '\0';
            if(i >= MAXCHAR + 2)
                printf("%s\n",data);                        
            printf("Value of i = %d\n",i );
        } 
    }

1 个答案:

答案 0 :(得分:7)

如果您有一个包含字符串“ Hello \ 0”的char数组,则它将如下所示:

+---+---+---+---+---+---+
| H | e | l | l | o |\0 |
+---+---+---+---+---+---+

或者,如果我们显示这些字符的整数值,则如下所示:

+-----+-----+-----+-----+-----+-----+
|  72 | 101 | 108 | 108 | 111 |   0 |
+-----+-----+-----+-----+-----+-----+

因此,如果我们有一个包含相同值的int数组,则它看起来像这样:

+-----------+-----------+-----------+-----------+-----------+-----------+
|        72 |       101 |       108 |       108 |       111 |         0 |
+-----------+-----------+-----------+-----------+-----------+-----------+

或者以十六进制形式,并假设为16位整数,则看起来像这样:

+------+------+------+------+------+------+
| 0048 | 0065 | 006C | 006C | 006F | 0000 |
+------+------+------+------+------+------+

或者查看各个字节,并假设使用小尾数字节顺序,如下所示:

+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 00 | 65 | 00 | 6C | 00 | 6C | 00 | 6F | 00 | 00 | 00 |
+----+----+----+----+----+----+----+----+----+----+----+----+

因此,如果我们有一个int数组,其中包含与字符串中的字符相对应的整数,并且如果(尽管总体类型不兼容),我们尝试使用printf和{{1}打印它们},它将查看第一个字节%s,它是48,然后打印它,但紧接着它会看到一个0字节,它将被解释为末尾。字符串,然后停止。