You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言函数外部(头文件中)字符串数组赋值报错原因咨询

函数外部变量赋值规则与编译错误解析

可正常运行的代码

#include <stdio.h>

char *arr[1] = {"Hello"};
int main()
{
    printf("%s", arr[0]);
    return 0;
}

无法运行的代码

#include <stdio.h>

char *arr[1];
arr[0] = "Hello";
int main()
{
    printf("%s", arr[0]);
    return 0;
}

编译时会出现如下错误:

warning: type defaults to ‘int’ in declaration of ‘arr’ [-Wimplicit-int]
main.c:4:1: error: conflicting types for ‘arr’; have ‘int[0]’


函数外部(全局作用域)的变量赋值规则

  1. 全局作用域内只能放置变量的声明或定义语句,不能直接写可执行的赋值表达式(比如单独的arr[0] = "Hello";属于可执行语句,必须放在函数内部)。
  2. 全局变量的初始化必须和定义绑定在一起,也就是在声明变量的同时用=完成初始化,比如第一个示例中char *arr[1] = {"Hello"};的写法。

错误原因解析

第二份代码里的arr[0] = "Hello";写在全局作用域,编译器无法识别这是赋值操作,反而会把它当成一个新的变量声明来处理:

  • 因为这条语句没有指定变量类型,老C标准允许隐式默认int类型,所以触发“type defaults to ‘int’”的警告。
  • 这个隐式声明的arr和之前已经定义的char *arr[1]类型完全冲突:前者被默认解析为int类型数组,后者是指向char的指针数组,因此编译器报出“conflicting types for ‘arr’”的错误。

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:50:09