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
相关产品推荐
相关产品推荐

