【问题标题】:Function accepts const char * but I need to pass it a char*函数接受 const char * 但我需要传递一个 char*
【发布时间】:2014-04-22 05:18:34
【问题描述】:

LibAIFF 库中有这个函数:

AIFF_Ref AIFF_OpenFile(const char* name, int flags);

它接受 const char* 但对于我的使用,名称必须是 char* 类型,因为我需要根据我的 AIFF 文件在我的目录中的位置来构建它(我可以正确完成) - 特别是,在我的例子中,名称是 AIFF 文件路径。

但我认为我因此遇到了一些问题(虽然我不确定)。当我向函数发送char* 时会发生什么?我注意到的不良行为发生在关联的AIFF_CloseFile 函数中,该函数遇到了一些问题,这些问题似乎是基于我发送给它的文件路径随机出现的。例如,如果我有完全相同的 AIFF 文件,其中两个名称仅更改了一个字母,则错误(这与 AIFF_CloseFile 试图释放在已释放或尚未释放的结构中定义的缓冲区有关) '未分配)发生在其中一个而不是另一个。如果我注释掉对关闭文件函数的调用,则一切正常,因为 AIFF 文件已成功打开并读取,但我不应该这样做。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • const 仅表示AIFF_OpenFile() 承诺不会更改输入字符串,这不是您的问题。尝试提出一个新问题,包括有问题的代码和更详细的问题示例,并给它一个合理的标题(“AIFF_CloseFile() 中的崩溃”或其他什么)。
  • 这是有用的信息。谢谢。不幸的是,涉及到许多与我面临的问题相关的功能,我不太清楚如何提出这个问题。
  • 在文本编辑器中打开您的源文件,选择代码的相关部分,复制到 Stack Overflow 问题文本框。添加解释出了什么问题,并带有具体示例(输入文本文件名,究竟是什么错误,...)。理想情况下,包括来自调试器的回溯,显示错误的来源。
  • 在这个特定的库中,name 参数仅用于创建带有fopen() 的句柄;也许在某个地方,您的AIFF_Ref 被另一段代码部分覆盖。
  • @ChristianAichinger 和 Jack:如果您愿意看一看,我已经在这篇文章 (stackoverflow.com/questions/22451558/…) 中发布了我的主要问题的扩展版本。谢谢!

标签: c char constants aiff


【解决方案1】:

当需要const char * 时,可以使用char *

如果一个函数接受const char *,它只是意味着该函数根本不会改变字符串内容。

反之则不好。

编辑:

我不知道您正在使用的库。如果库记住了您使用的字符串,但没有制作自己的内部副本,这可能是个问题。不过,这将是一个糟糕的图书馆..

【讨论】:

  • 好的,谢谢。那正是我所想。那么问题肯定出在其他地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多