我想要打印这样的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”。 我不明白为什么。
我尝试调试我的代码,但我没有注意到任何事情,这可能对我有帮助。
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";