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

C语言如何将char指针值拼接到char数组中获取Windows启动路径

问题原因分析
  • 路径初始化语法错误:你声明shortcutpath时用了两个分号拆分字符串,后半段\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup没有被存入数组,数组初始值仅为C:\\Users\\
  • 拼接逻辑缺失:你仅调用了一次strcat拼接用户名,没有拼接后半段路径的逻辑,自然无法得到完整路径
最简实现方案

推荐直接用snprintf做格式化拼接,无需多次调用字符串拼接函数,写法更简洁,还能主动控制缓冲区大小避免溢出:

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    char* username = getenv("USERNAME");
    // 判空处理避免环境变量读取失败导致空指针崩溃
    if (username == NULL) {
        printf("获取用户名失败\n");
        return 1;
    }

    char shortcutpath[256] = {0}; // 开256字节足够容纳最长的启动路径
    snprintf(shortcutpath, sizeof(shortcutpath), 
        "C:\\Users\\%s\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup",
        username);
    
    printf("%s\n", shortcutpath);
    return 0;
}
原有strcat写法的修正版

如果要坚持用strcat实现,调整拼接顺序和初始化逻辑即可:

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    char* username = getenv("USERNAME");
    if (username == NULL) {
        printf("获取用户名失败\n");
        return 1;
    }

    char shortcutpath[256] = "C:\\Users\\";
    strcat(shortcutpath, username);
    strcat(shortcutpath, "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup");
    
    printf("%s\n", shortcutpath);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:24:04