Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我只看到第一个角色_C - Fatal编程技术网

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

C 为什么我只看到第一个角色,c,C,问题: 我知道我应该使用一个字符数组,但是字符数据作为它们对应的数值存储在数组中;所以我们可以说,int数组和字符数组都是相同的,唯一的区别是;通常,字符使用1个字节,int使用4个字节 我的问题: 我有一个int数组;我正在将数据存储到该数组中,但当我尝试使用printf和%s打印该数组时,它只是从该数组打印第一个字符 当%s与printf一起使用时,它会搜索空字符,即\0,以知道在哪里停止。在我的代码中,我将/0显式地放在字符串的末尾 代码(已编辑): /* Write a program

问题:

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

我的问题:

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

%sprintf一起使用时,它会搜索空字符,即\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 );
        } 
    }
/*编写一个程序来打印所有长度超过80的输入行
人物*/
#包括
#定义MAXCHAR 80
#定义第1000行
int main(){
int i,c=0;
int数据[行];
而(c!=EOF){
对于(i=0;i=MAXCHAR+2)
printf(“%s\n”,数据);
printf(“i的值=%d\n”,i);
} 
}

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

+---+---+---+---+---+---+
| H | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+-----+-----+-----+-----+-----+
|  72 | 101 | 108 | 108 | 111 |   0 |
+-----+-----+-----+-----+-----+-----+
+-----------+-----------+-----------+-----------+-----------+-----------+
|        72 |       101 |       108 |       108 |       111 |         0 |
+-----------+-----------+-----------+-----------+-----------+-----------+
+------+------+------+------+------+------+
| 0048 | 0065 | 006C | 006C | 006F | 0000 |
+------+------+------+------+------+------+
+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 00 | 65 | 00 | 6C | 00 | 6C | 00 | 6F | 00 | 00 | 00 |
+----+----+----+----+----+----+----+----+----+----+----+----+
或者,如果我们显示这些字符的整数值,则如下所示:

+---+---+---+---+---+---+
| H | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+-----+-----+-----+-----+-----+
|  72 | 101 | 108 | 108 | 111 |   0 |
+-----+-----+-----+-----+-----+-----+
+-----------+-----------+-----------+-----------+-----------+-----------+
|        72 |       101 |       108 |       108 |       111 |         0 |
+-----------+-----------+-----------+-----------+-----------+-----------+
+------+------+------+------+------+------+
| 0048 | 0065 | 006C | 006C | 006F | 0000 |
+------+------+------+------+------+------+
+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 00 | 65 | 00 | 6C | 00 | 6C | 00 | 6F | 00 | 00 | 00 |
+----+----+----+----+----+----+----+----+----+----+----+----+
因此,如果我们有一个包含相同值的
int
数组,它看起来如下所示:

+---+---+---+---+---+---+
| H | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+-----+-----+-----+-----+-----+
|  72 | 101 | 108 | 108 | 111 |   0 |
+-----+-----+-----+-----+-----+-----+
+-----------+-----------+-----------+-----------+-----------+-----------+
|        72 |       101 |       108 |       108 |       111 |         0 |
+-----------+-----------+-----------+-----------+-----------+-----------+
+------+------+------+------+------+------+
| 0048 | 0065 | 006C | 006C | 006F | 0000 |
+------+------+------+------+------+------+
+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 00 | 65 | 00 | 6C | 00 | 6C | 00 | 6F | 00 | 00 | 00 |
+----+----+----+----+----+----+----+----+----+----+----+----+
或者十六进制,假设16位整数,它如下所示:

+---+---+---+---+---+---+
| H | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+-----+-----+-----+-----+-----+
|  72 | 101 | 108 | 108 | 111 |   0 |
+-----+-----+-----+-----+-----+-----+
+-----------+-----------+-----------+-----------+-----------+-----------+
|        72 |       101 |       108 |       108 |       111 |         0 |
+-----------+-----------+-----------+-----------+-----------+-----------+
+------+------+------+------+------+------+
| 0048 | 0065 | 006C | 006C | 006F | 0000 |
+------+------+------+------+------+------+
+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 00 | 65 | 00 | 6C | 00 | 6C | 00 | 6F | 00 | 00 | 00 |
+----+----+----+----+----+----+----+----+----+----+----+----+
或者查看单个字节,并假设小端字节顺序,它如下所示:

+---+---+---+---+---+---+
| H | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+-----+-----+-----+-----+-----+
|  72 | 101 | 108 | 108 | 111 |   0 |
+-----+-----+-----+-----+-----+-----+
+-----------+-----------+-----------+-----------+-----------+-----------+
|        72 |       101 |       108 |       108 |       111 |         0 |
+-----------+-----------+-----------+-----------+-----------+-----------+
+------+------+------+------+------+------+
| 0048 | 0065 | 006C | 006C | 006F | 0000 |
+------+------+------+------+------+------+
+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 00 | 65 | 00 | 6C | 00 | 6C | 00 | 6F | 00 | 00 | 00 |
+----+----+----+----+----+----+----+----+----+----+----+----+

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

对不起,我对此表示歉意,我编辑的问题代码使用了错误的格式说明符,因此UB。Zzzzz。下一个无论如何,想想看:
int
可能包含一个零字节作为其对象表示的一部分。
printf(“%s\n”,data)
其中
%s
表示“这是一个字符串,诚实”,而
数据
不是字符串。无论如何,这个问题缺乏背景。你到底想做什么?对于什么输入,您实际需要什么输出?@Bhaskar然后使用
int
的格式说明符。他是对的,您使用了错误的说明符。或者,格式说明符是正确的,而数组的类型是错误的。因此,这两种说明符应该打印相同的内容thing@Bhaskar重读整个答案。您可能只看到了第一部分,我正在编辑。“因此,如果我们有一个
int
数组,其中包含与字符串中的字符相对应的整数,并且我们尝试使用
printf
%s
打印该字符串,那么它不是一个字符串,
printf
调用未定义的行为。真正的答案可能是另一个问题,即询问OP试图做什么,以及这怎么可能不是这样做的。@下划线\u如果你是对的,我不应该将
int*
称为“字符串”。固定的