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

Ubuntu下运行使用string.h的C程序及编译运行问题求助

解决你的C程序编译与运行问题

兄弟,我来帮你一步步拆解这个问题,搞清楚到底哪里出问题了:

先澄清一个关键误区:gcc filename.c -E并没有帮你完成编译

你说用gcc filename.c -E后“编译成功”,其实这个命令只做了预处理步骤——它会把代码里的头文件展开、处理宏定义,然后把预处理后的内容输出到终端(如果没加-o参数的话),根本不会生成可执行文件。你觉得“成功”只是因为预处理阶段没报错,但离生成能运行的程序还差好几个步骤呢!

第一步:先解决最初的编译失败问题

你一开始直接编译失败,这才是核心问题。先别用-E,直接运行:

gcc filename.c

仔细看终端输出的错误信息——这通常是解决问题的关键。比如常见的情况:

  • 拼写错误:比如把#include <string.h>写成了#include <sting.h>
  • 函数使用错误:比如调用strcpy时参数类型不匹配,或者忘了写main函数(程序入口)
  • 特殊场景:如果用到了某些非标准的字符串函数,可能需要额外链接库(不过string.h里的标准函数默认是链接的)

把错误信息搞清楚,才能针对性解决。

第二步:正确生成可执行文件

当预处理没问题、原始编译错误解决后,用以下命令生成可执行文件:

  • 生成默认的a.out:
    gcc filename.c
    
    然后运行:
    ./a.out
    
  • 生成指定名称的可执行文件(比如和源文件同名):
    gcc filename.c -o filename
    
    然后运行:
    ./filename
    

第三步:解决运行时的常见问题

如果编译成功了但还是运行不了,大概率是这两个原因:

  • 权限不足:终端提示Permission denied,给文件加执行权限就行:
    chmod +x a.out
    # 或者对应你的可执行文件名
    chmod +x filename
    
  • 没加./前缀:直接打filename或a.out提示“command not found”?这是因为当前目录不在系统的PATH环境变量里,必须用./指定“当前目录下的这个程序”,也就是./filename或./a.out。

先按这个流程走,先搞定最初的编译错误,再生成正确的可执行文件,应该就能正常运行了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:25:07