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

C语言新手求助:无法读取命令行参数个数问题排查

帮你解决打印命令行参数个数的问题

嘿,我发现你的代码和Makefile里各有一个小问题,咱们一步步来修复:

1. 代码里的核心错误:printf格式符用错了

你现在用的是printf("%c", arg_count);,但%c是用来输出ASCII字符的——比如当arg_count等于1时,它会打印ASCII码为1的不可见控制字符,而不是你想要的数字"1"。

正确的做法是用%d格式符来输出整数,修正后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(int arg_count, char * argv[]) {
    printf("%d\n", arg_count);  // 用%d输出整数,加\n让输出更整洁
    return 0;  // 建议加上main函数的返回值,符合C标准规范
}

2. Makefile的不完整问题

你提供的Makefile里program_OBJS ...部分内容缺失了,这会导致编译流程断裂。我帮你补全并优化了Makefile,确保它能正确编译你的程序:

program_NAME := testprog
program_C_SRCS := $(wildcard ./src/*.c)
program_CXX_SRCS := $(wildcard ./src/*.cpp)
program_C_OBJS := ${program_C_SRCS:.c=.o}
program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.o}
program_OBJS := $(program_C_OBJS) $(program_CXX_OBJS)  # 合并所有目标文件

# 编译C文件的规则
%.o: %.c
	gcc -c $< -o $@

# 编译C++文件的规则(如果有C++代码的话)
%.o: %.cpp
	g++ -c $< -o $@

# 链接生成可执行文件
$(program_NAME): $(program_OBJS)
	gcc $(program_OBJS) -o $(program_NAME)

# 清理编译产物
clean:
	rm -f $(program_OBJS) $(program_NAME)

测试验证

把修正后的代码放到src目录下,终端运行make生成testprog,再执行./testprog hello world,你应该会看到输出3——因为程序本身算第一个参数,加上hello和world一共3个参数,这就符合预期啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:27:31