【发布时间】:2022-01-06 18:09:31
【问题描述】:
这段代码是如何工作的?
#include <stdio.h>
#include <string.h>
int main()
{
#define NAME_LEN 10
char name[NAME_LEN+1]; // line 8
strcpy(name,"Hi"); // line 9
char (* name_ptr)[NAME_LEN +1] = & name; // line 10
printf("%s=%s\n%s=%s\n", // line 12
"name",name, // line 13
"name_ptr",name_ptr // line 14
);
}
在第 10 行之前,一切都是例行公事。对我来说,第 10 行混合在一起声明 char * 和 char [length],所以我希望有一个由 10 个 char * 组成的数组(显然,编译器不同意,因为这行得通)。当我用-Wall 编译它时,我得到以下信息:
$ cc -g -Wall a.C
a.C: In function ‘int main()’:
a.C:16:2: warning: format ‘%s’ expects argument of type ‘char*’, but argument 5 has type ‘char (*)[11]’ [-Wformat=]
);
我错过了什么?
【问题讨论】:
-
@paulsm4 肯定编译器不认为这是一个函数。
-
在 C 中声明指向数组的指针似乎很棘手且不常见。您可以使用普通的
char *指针:char * name_ptr = name;