请问用于复制命令行argv字符串到op的简单C函数为何无法正常运行?
问题定位与代码修复
现存代码的核心问题
strcpy传参逻辑错误:argv是存储命令行参数字符串的指针数组,argv[1]本身就是指向第一个传入参数字符串首地址的char*类型,可直接作为strcpy的源字符串参数。代码中额外添加的*解引用操作,会把参数从「字符串指针」变成「字符串的第一个字符(char类型值)」,传给strcpy时会被解析为非法内存地址,直接触发程序崩溃。- 缺少必要头文件:
printf的函数声明在<stdio.h>中,strcpy的函数声明在<string.h>中,未引入对应头文件会触发编译器告警,甚至产生无法预期的未定义行为。 - 缺少参数合法性校验:如果运行程序时未传入任何命令行参数,
argv[1]为空指针,直接访问会触发内存访问错误,导致程序异常退出。
修正后的可运行代码
#include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { // 校验是否传入了有效命令行参数 if (argc < 2) { printf("请在运行时传入对应字符串参数\n"); return 1; } char op[90]; // 直接使用argv[1]作为strcpy的源参数 strcpy(op, argv[1]); printf("\n %s", op); return 0; }
注意:
op数组长度为90,实际使用时需保证传入的命令行参数长度不超过89(预留字符串末尾'\0'终止符的存储位置),避免出现数组越界问题。
内容的提问来源于stack exchange,提问作者EduDY
相关产品推荐
相关产品推荐

