【问题标题】:Cast from Pointer to Pointer C++从指针转换为指针 C++
【发布时间】:2016-08-24 13:18:19
【问题描述】:

如果我得到指向以下代码行的指针将不胜感激

Char fileName[100] ;

strncpy(static_cast<Char *>( fileName),static_cast<const Char *>(getCurrentUser()),Int32(ML_STRING_SIZE));

我收到 Lint 错误:从指针转换到指针。如果我在没有静态的情况下进行转换,则会将错误作为 C 样式转换。如果我不使用任何演员

strncpy(( fileName),(getCurrentUser()),Int32(ML_STRING_SIZE));   it throws 
array type passed to function expecting a pointer

我不知道如何解决它。

【问题讨论】:

  • Char 定义为什么? fileName 的类型是什么?你真的需要第二个演员吗?请提供minimal reproducible example。
  • 在这种情况下,您甚至不需要任何演员表(除非fileName 是const,在这种情况下您的问题要大得多)。
  • 仅使用strncat(fileName, "_", ML_STRING_SIZE); 会得到哪些错误/警告(如果有)?
  • 如果你传递&amp;fileName[0] 而不是fileName 怎么办?粗犷的短绒...
  • 在您阅读并理解其文档之前,请勿使用strncpy。它不是 strcpy 的“安全”dropin 替代品。如果你搞砸了你的字符串长度,strncpy 的使用只会推迟缓冲区溢出。它不会阻止它。

标签: c++ casting


【解决方案1】:

这里是修复。

strncpy(( &fileName[0]),(getCurrentUser()),UInt32(ML_STRING_SIZE));
  1. 第一个参数 &fileName[0] ++ DreamLax
  2. 第二个参数返回 const char* 所以不需要强制转换
  3. 第三个参数应该是无符号整数。

这三个一起解决了这个问题。

【讨论】:

  • @user2079303:抱怨的不是编译器,而是 linter。
猜你喜欢
  • 2021-09-20
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多