为什么 printf 不打印 char* 字符串的第一个字符?

问题描述 投票:0回答:1

我想要打印这样的ascii符号表:

  0 1 2 3 4 5 6 7 8 9 a b c d e f
0 
1            
2   ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ 
8 � � � � � � � � � � � � � � � �
9 � � � � � � � � � � � � � � � �
a � � � � � � � � � � � � � � � �
b � � � � � � � � � � � � � � � �
c � � � � � � � � � � � � � � � �
d � � � � � � � � � � � � � � � �
e � � � � � � � � � � � � � � � �
f � � � � � � � � � � � � � � � �

我写了这个c代码:

#include <stdio.h>

int main() {
    char s[34] = "  0 1 2 3 4 5 6 7 8 9 a b c d e f\n";
    printf("%s", s);
    for (size_t i = 0; i < 16; ++i) {
        char str[34];
        char hex[2];
        snprintf(hex, sizeof(hex), "%x", (int)i);
        str[0] = hex[0];
        for (size_t j = 0; j < 16; ++j) {
            str[2 * j + 1] = ' ';
            str[2 * j + 2] = i * 16 + j;
        }
        str[33] = '\0';
        printf("%s\n", str);
    }
}

它打印出这个:

  0 1 2 3 4 5 6 7 8 9 a b c d e f
0 
1            
   ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ 
8 � � � � � � � � � � � � � � � �
9 � � � � � � � � � � � � � � � �
a � � � � � � � � � � � � � � � �
b � � � � � � � � � � � � � � � �
c � � � � � � � � � � � � � � � �
d � � � � � � � � � � � � � � � �
e � � � � � � � � � � � � � � � �
f � � � � � � � � � � � � � � � �

我的问题是,以符号“2”开头的 4 行符号在打印时没有第一个符号“2”。 我不明白为什么。

我尝试调试我的代码,但我没有注意到任何事情,这可能对我有帮助。

c printf
1个回答
-1
投票
char s[34] = "  0 1 2 3 4 5 6 7 8 9 a b c d e f\n";

s
太短,无法容纳整个字符串和终止空字符

计算机在计算字符方面比人类好得多:

char s[] = "  0 1 2 3 4 5 6 7 8 9 a b c d e f\n";
© www.soinside.com 2019 - 2024. All rights reserved.