gpt4 book ai didi

c - 为什么打印二维字符数组会产生垃圾值?

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:46 24 4
gpt4 key购买 nike

我正在实现一个仅使用双指针和指针表示法打印二维字符数组的函数。当我运行代码时,它以我想要的格式打印了一堆垃圾值,而不是正确的字符。

我的教授指示我不要使用 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* iarr 指向的更进一步。希望 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com