我的问题涉及创建在整个程序文件中可见的变量。换句话说,文件本地变量。
考虑这个例子
#include <stdio.h>
struct foo
{
char s[] = "HELLO";
int n = 5;
};
struct foo *a;
int main()
{
puts("Dummy outputs!\n");
printf("%s\n",a->s);
printf("%d\n",a->n);
return 0;
}
现在,此代码段不会运行
为什么呢?
因为指向变量 a 的结构不会被分配,因为语句从未执行过。
现在,如何在不改变此变量 a 范围的情况下分配它?
答案 0 :(得分:2)
#include <stdio.h>
struct foo {
char const *s;
int n;
};
/* static for file-local */
static struct foo a = { "HELLO" , 5 };
int main(void) {
printf("%s\n", a.s);
printf("%d\n", a.n);
return 0;
}
答案 1 :(得分:1)
现在,如何在不改变此变量范围的情况下分配它?
我确信有很多方法可以解决您的问题。这是我的建议。
将struct foo
的定义更改为s
中包含固定数量的字符。
创建a
作为对象而不是指针。用必要的值初始化它。
将a
设为static
变量,因此其使用仅限于该文件。
在文件的其余部分使用对象a
而不是指针a
。
#include <stdio.h>
struct foo
{
char s[20];
int n;
};
static struct foo a = {"HELLO", 20};
int main()
{
puts("Dummy outputs!\n");
printf("%s\n",a.s);
printf("%d\n",a.n);
return 0;
}
答案 2 :(得分:0)
此:
struct foo
{
char s[] = "HELLO";
int n = 5;
};
无效的C代码。您首先声明类型:
struct foo
{
char s[10];
int n;
};
然后定义该类型的变量:
static struct foo a = { "HELLO", 5 };
static
关键字允许此变量具有文件本地范围。
您现在可以像这样使用它:
static struct foo a = { "HELLO", 5 };
void other()
{
puts("Dummy outputs!\n");
printf("%s\n",a.s);
printf("%d\n",a.n);
}
int main()
{
puts("Dummy outputs!\n");
printf("%s\n",a.s);
printf("%d\n",a.n);
other();
return 0;
}
请注意,可以从两个函数访问a
。但是,它不会从其他文件中定义的函数中查看,因为它被声明为static
。
至于直接使用指针和结构,你可以随时以这种方式使用它的地址:
some_function(&a);
答案 3 :(得分:0)
好吧,我需要直接使用指针代替结构
试试这个:
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
struct foo{
char s[20];
int n;
};
int main(void){
struct foo *a;
a = malloc(sizeof(struct foo));
puts("Dummy outputs!\n");
strcpy(a->s, "HELLO");
a->n = 5;
printf("%s\n",a->s);
printf("%d\n",a->n);
free(a);
return 0;
}
输出:
Dummy outputs! HELLO 5