#include <stdio.h>
int main(void){
char c1[], c2[];
c1 = "hello";
c2 = "world";
printf("%s %s", c1, c2);
return 0;
}
究竟是什么让我无法使用&#39; char c1 [],c2 []&#39;?我有一些Java知识,我发现C语法比较熟悉,但显然有些东西不起作用。
是否还有任何理由将char声明为char变量[]而不是char []变量?它似乎更有意义(Java表示法)
答案 0 :(得分:6)
此:
char c1[]
表示“长度未知的字符数组”。您不能创建未知长度的数组,但可以将它们作为函数的参数,如:
void foo(char c1[])
如果长度是隐式已知的,您也可以创建它们,如:
char c1[] = "hello"; // size is 6, including null terminator
至于:
是否还有任何理由将char声明为char变量[]而不是char []变量?
一直都是这样。我确信C程序员觉得Java方式也没有意义。 40年前用语言语法做出的决定今天没有得到有用的辩论。
答案 1 :(得分:1)
准确地说,该代码不是声明,而是定义。在C中,您无法定义长度为空的数组,您可以明确指定它:
char c1[6] = "hello";
或者你可以隐含地这样做:
char c1[] = "hello";
如果数组的长度仅在运行时间内已知,请使用已分配的数组:
size_t n = <calculate the size needed>;
char *c1 = malloc(n);
但是对于声明,你可以做这样的外部声明:
extern char c1[];