问题:
我知道我应该使用字符数组,但是字符数据将作为它们相应的数值存储在其中;因此,我们可以说 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 );
}
}
答案 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字节,它将被解释为末尾。字符串,然后停止。