我正在实现一个仅使用双指针和指针表示法打印二维字符数组的函数。当我运行代码时,它以我想要的格式打印了一堆垃圾值,而不是正确的字符。
我的教授指示我不要使用 arr[row][col],相反,我必须使用 ((arr+i)+j) 或类似的方式访问它
这是一个类的项目,我无法更改此函数之外的任何代码。这些字符的格式应该像单词搜索拼图一样。传递给我的函数的参数是 char** arr, int size
。
这是我的功能:
for(int i = 0; i < size; i++){
printf("%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", *(arr+i), *(arr+i)+1, *(arr+i)+2, *(arr+i)+3, *(arr+i)+4, *(arr+i)+5, *(arr+i)+6, *
(arr+i)+7, *(arr+i)+8, *(arr+i)+9, *(arr+i)+10, *(arr+i)+11, *(arr+i)+12, *(arr+i)+13, *(arr+i)+14 ); }
预期输出:
W D B M J Q D B C J N Q P T I
I R Z U X U Z E A O I O R T N
M N Z P L R N H L Y L X H M D
M Y E K A I D P I U L Y O W I
A O A B A R K U F V I H L A A
L O N M R X K I O J N A V R N
A E P T A A R A R T O W A I A
S U C Z A U S I N A I A L Z V
K O T A O N R K I S S I A O N
A H X S V K A I A E A I B N E
U D S X N X C C D W G S A A V
O I S D W L E J N J T X M H A
M O X W T N H Q D X O Q A Q D
R U U V G E O R G I A Q V D A
V F L O R I D A L G L W O X N
实际输出:
░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛
≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■
0 1 2 3 4 5 6 7 8 9 : ; < = >
P Q R S T U V W X Y Z [ \ ] ^
p q r s t u v w x y z { | } ~
É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ ₧
░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛
╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ █ ▄ ▌ ▐
≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■
0 1 2 3 4 5 6 7 8 9 : ; < = >
P Q R S T U V W X Y Z [ \ ] ^
└ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬
` a b c d e f g h i j k l m n
最佳答案
如果 arr
真的是一个 char**
,那么你需要解引用两次才能得到一个 char
。
所以,在你的声明中,arr+i
是另一个 char**
,指向一个 char*
i
比 arr
指向的更进一步。希望 arr
指向至少 size
长的 char*
数组的开头。
现在 *(arr+i)
取消引用它,获取 arr+i
指向的 char*
,给你一个 char*
.
例如,现在 *(arr+i)+7
是另一个 char*
,指向一个 char
7 步从一个 *(arr+i)
指向。希望 *(arr+i)
指向至少 15 长的 char
数组的开头。
但是您没有取消引用它,所以您试图打印指针的值(即它所持有的地址),而不是它指向的值(char
)。
试试 *(*(arr+i)+7)
。
关于c - 为什么打印二维字符数组会产生垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58514208/