【问题标题】:C how to use strcat with static offset char arrayC如何将strcat与静态偏移char数组一起使用
【发布时间】: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
  • 如果你想要做的(你没有说)是在最后一个斜杠后面附加文件名,那么是的,接受答案的最后一段是正确的。

标签: c static arrays strcat


【解决方案1】:

这是在初始字符后放置"file.conf" 的正确方法:

strcat(&FileConfPath[1], "file.conf");

FileConfPath[1] 是索引 1 处的字符; &FileConfPath[1] 是索引 1 处字符的地址,这是您要传递给 strcat 的地址。

注意,如果你想在斜线后面放置"file.conf",你想使用斜线后面的字符的地址,即

strcpy(pos+1, "file.conf");

不言而喻,pos+11(一个用于斜杠加上一个用于空终止符加上九个用于"file.conf" 的字符)需要小于或等于&FileConfPath[255],以避免缓冲区溢出。

【讨论】:

  • 第一个字符?我认为不会。
  • @CareyGregory 也许你是对的 - 我编辑了答案。
  • [1] 表示第二个哈哈[0] 表示第一个,但是是的,我想我每次使用 char 数组的索引时都需要使用&。如果没有任何索引说明符,我觉得它自动成为地址很奇怪?然而有了它,我猜它只是一个值?
  • 如果你使用pos将“file.conf”放在反斜杠之后,如this answer所示,pos + 1 + strlen("file.conf") + 1最好是
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多