【发布时间】:2014-04-24 01:18:24
【问题描述】:
我当前的代码看起来像这样(看起来不错,但无法编译)。
char FileConfPath[256];
char *pos;
GetModuleFileNameA(0, FileConfPath, 256);
pos= strrchr(FileConfPath, '\\');
if ( pos )
strcat(FileConfPath[1], "file.conf");
else
strcat(FileConfPath, "file.conf");
产生 2 个编译器错误。
error #2140: Type error in argument 1 to 'strcat'; expected 'char * restrict' but found 'char'.
我必须这样做
strcat(&FileConfPath[1], "file.conf");
在这里使用地址看起来不合适。
似乎错误是针对FileConfPath[1] 的,而不是针对没有索引说明符的错误。
【问题讨论】:
-
可能看起来不正确,但它是正确的。但是你想要达到的目标并不完全清楚。为什么要复制到
FileConfPath[1]只是因为字符串中某处 出现斜线? -
我没有编写我用 Hex-Ray 反编译它的代码,只是试图理解它.. 似乎是对文件路径的某种检测,
GetModuleFileName可能会返回一个文件夹路径或缺少斜线的路径?我不知道,但无论哪种方式,我猜斜线对于稍后加载文件很重要fopen -
嗯,反编译代码有其风险,而且该代码几乎肯定是错误的。
strchr将在路径中检测到斜线 anywhere。因此,如果路径包含foo\bar,您的代码将失败,因为它会将foo\bar变成ffile.conf。 -
从阅读文档看来
strrchr只检测到最后一个斜杠。Locate last occurrence of character in string -
如果你想要做的(你没有说)是在最后一个斜杠后面附加文件名,那么是的,接受答案的最后一段是正确的。