【发布时间】:2021-04-15 00:53:32
【问题描述】:
我在 C 中有以下代码
#include <stdio.h>
char *gstr[] = { "Hello", "World" };
void func(char str[][8]) {
printf("%p\n", (void *)str);
printf("%p\n", (void *)(str + 1));
printf("%s\n", *(str + 1));
}
int main(void) {
printf("%p\n", (void *)gstr);
printf("%p\n", (void *)(gstr + 1));
printf("%s\n", *(gstr + 1));
printf("Calling Function\n");
func(gstr);
return 0;
}
以下是输出
0x556f11ddd010
0x556f11ddd018
World
Calling Function
0x556f11ddd010
0x556f11ddd018
$��oU
我不明白为什么函数func 中的printf("%s\n", *(str+1)); 不打印字符串world。
【问题讨论】:
-
是什么让你选择了原型
void func(char str[][8])?您是如何编译代码的 - 您是否收到任何警告? -
例如,如果使用
gcc,则使用gcc -Wall -Werror -Wextra -g编译并解决显示的所有错误。当您运行无效代码时,您不能期望某种行为 -
如果你用我建议的命令编译的话,你会立即看到错误:
incompatible pointer type ... expected ‘char (*)[8]’ but argument is of type ‘char **’