【问题标题】:Getting a path and appending a filename [duplicate]获取路径并附加文件名[重复]
【发布时间】:2017-02-12 20:32:41
【问题描述】:

我正在尝试获取路径(appdata)并附加文件名(smss.dll),并将这两者结合起来形成C:\users\username\appdata\roaming\smss.dll 我已经有了这个:

static char appdata[MAX_PATH+1];
SHGetSpecialFolderPathA(HWND_DESKTOP, appdata, CSIDL_APPDATA, FALSE);

LPCSTR target = "smss.dll";

如何将这些组合成一个变量?

【问题讨论】:

  • 这是 C 代码。你读过 strcat 吗?
  • 您确实应该使用 W 版本,而不是 A 版本。现在是 2017 年。
  • 将文件名附加到路径具有建议的重复项忽略的附加语义。投票重新开放,即使它需要作为另一个问答的副本关闭。

标签: c++ windows winapi


【解决方案1】:

从 Windows 8 开始,您可以使用 PathAppend(仅限于 MAX_PATH 字符)或 PathCchAppendEx

【讨论】:

    【解决方案2】:
    static char appdata[MAX_PATH+1];
    SHGetSpecialFolderPathA(HWND_DESKTOP, appdata, CSIDL_APPDATA, FALSE);
    
    strcat(appdata, "\\smss.dll");
    

    strcat 函数将右侧字符串附加到左侧缓冲区。它假设目的地有空间来完成连接。如果没有足够的空间,这是未定义的行为。因此,最好检查是否有足够的空间。

    【讨论】:

    • strcat 不安全,不应在现代代码中使用。
    • @JonathanPotter 这就是为什么我建议先检查目的地是否还有空间
    • 使用多种安全方法中的一种,您无需检查。
    • 是的,您提出了该建议,但您提供的代码完全不安全且损坏。
    猜你喜欢
    • 2014-04-08
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多