请教大家 C 语言全局变量赋值编译报错 问题---是不是不能在函数体外赋值

测试一下 2019-02-21 11:22:32

#include <stdio.h>
#include <string.h>

char* str[3];
str[0] ="hello";
str[1] ="do";
str[2] ="learn";

int main(void)
{
int flag = 3;
// char* str[3];
// str[0] ="hello";
// str[1] ="do";
// str[2] ="learn";

while(flag > 0)
{ flag--;
// print(flag);
printf("%s\n",str[flag]);
}

}


错误是
test.c:5:2: 警告: 数据定义时没有类型或存储类 [默认启用]
test.c:5:2: 错误: 与‘str’类型冲突
test.c:4:9: 附注: ‘str’的上一个声明在此
test.c:5:2: 错误: 用窄字符串初始化宽字符数组
test.c:6:2: 警告: 数据定义时没有类型或存储类 [默认启用]
test.c:6:2: 错误: 与‘str’类型冲突
test.c:4:9: 附注: ‘str’的上一个声明在此
test.c:6:2: 错误: 用窄字符串初始化宽字符数组
test.c:7:2: 警告: 数据定义时没有类型或存储类 [默认启用]
test.c:7:2: 错误: 与‘str’类型冲突
test.c:4:9: 附注: ‘str’的上一个声明在此
test.c:7:2: 错误: 用窄字符串初始化宽字符数组
test.c: 在函数‘main’中:
test.c:20:3: 警告: 格式 ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

---
我把str[0] ="hello";
str[1] ="do";
str[2] ="learn";
放到main里面就可以正常编译了。以前没注意到。谢谢大家~
...全文
440 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
耕者走兔 2019-02-25
  • 打赏
  • 举报
回复
引用 6 楼 lin5161678 的回复:
[quote=引用 4 楼 耕者走兔 的回复:]
1)你使用的是全局变量,这种变量是不允许初始化。
2)你的赋值方法是被禁止的。(不能被连接器识别和使用)

你可以这样做;
static char× str[3]={"aaaa","bbbbbb","cccccccc"};

但变量(str)只在该文件中有效,不能在该文件以外地方使用。
全局变量当然可以初始化 而且有默认初始化
为什么会说不能初始化
不是赋值方法禁止
禁止的是语句
C语言 语句只能写在函数里面 不能写在函数外面[/quote]
我表达的意思和你完全一致,但你的表达比我清晰,谢谢。
1)具有外部链接属性变量是不能显示初始化(即程序员指定初始化)
2)文件中不能出现语句。(变量定义除外)
lin5161678 2019-02-24
  • 打赏
  • 举报
回复
引用 4 楼 耕者走兔 的回复:
1)你使用的是全局变量,这种变量是不允许初始化。
2)你的赋值方法是被禁止的。(不能被连接器识别和使用)

你可以这样做;
static char× str[3]={"aaaa","bbbbbb","cccccccc"};

但变量(str)只在该文件中有效,不能在该文件以外地方使用。
全局变量当然可以初始化 而且有默认初始化
为什么会说不能初始化
不是赋值方法禁止
禁止的是语句
C语言 语句只能写在函数里面 不能写在函数外面
测试一下 2019-02-24
  • 打赏
  • 举报
回复
引用 4 楼 耕者走兔 的回复:
1)你使用的是全局变量,这种变量是不允许初始化。
2)你的赋值方法是被禁止的。(不能被连接器识别和使用)

你可以这样做;
static char× str[3]={"aaaa","bbbbbb","cccccccc"};

但变量(str)只在该文件中有效,不能在该文件以外地方使用。


引用 4 楼 耕者走兔 的回复:
1)你使用的是全局变量,这种变量是不允许初始化。
2)你的赋值方法是被禁止的。(不能被连接器识别和使用)

你可以这样做;
static char× str[3]={"aaaa","bbbbbb","cccccccc"};

但变量(str)只在该文件中有效,不能在该文件以外地方使用。

谢谢 !我试试。
耕者走兔 2019-02-23
  • 打赏
  • 举报
回复
1)你使用的是全局变量,这种变量是不允许初始化。
2)你的赋值方法是被禁止的。(不能被连接器识别和使用)

你可以这样做;
static char× str[3]={"aaaa","bbbbbb","cccccccc"};

但变量(str)只在该文件中有效,不能在该文件以外地方使用。

lin5161678 2019-02-22
  • 打赏
  • 举报
回复
全局不能写语句
所以 赋值语句全错
    str[0] ="hello";
str[1] ="do";
str[2] ="learn";

只能写一些声明 定义之类的东西
自信男孩 2019-02-22
  • 打赏
  • 举报
回复
赋值需要放在函数内,因为代码运行是以函数为主的。
帅得不敢出门 2019-02-22
  • 打赏
  • 举报
回复
非定义代码要写在函数中。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧