You need to enable JavaScript to run this app. 请问用于复制命令行argv字符串到op的简单C函数为何无法正常运行?
优惠活动
大模型
产品
解决方案
定价
更多

请问用于复制命令行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 18:45:03