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

标签 c

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

我的教授指示我不要使用 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/

相关文章:

c - 没有类型的 typedef 是什么意思?

c++ - 如何让 const char* 函数工作?

c - 在 C 中使用结构指针,即使它们没有声明

c - 确定大端或小端机器的宏定义?

c - 如何在C中手动将十进制值转换为十六进制字符串?

c - 如何在没有任何函数的情况下为 C 结构中的数组赋值?

c++ - 链接器如何确定链接到哪个函数?

用于解析程序中标识符的 Python 包(C、Scala、Lisp)?

c - 最小-最大算法中的内存泄漏

c - 链表中的字符串问题。字段被最后一个节点的输入覆盖