c ++将带引号的字符串作为char数组传递给函数
Posted
技术标签:
【中文标题】c ++将带引号的字符串作为char数组传递给函数【英文标题】:c++ Pass quoted string as char array to a function 【发布时间】:2013-08-23 16:24:35 【问题描述】:所以我有一个函数声明为:
void writeFile (unsigned char *fileName, unsigned char *data)
如果我这样调用函数:
writeFile("f.txt", "Test1");
没问题。
如果我像这样打第二个电话:
writeFile("s.txt", "Test2\nline");
文件名没问题,但数据已损坏(前 5 个字节乱码)。
如果我像这样打第三个电话:
writeFile("f.txt", "Test3\r\nline");
文件名已损坏,数据的前 5 个字节乱码。
发生了什么事?
【问题讨论】:
字符串损坏的声音! ;) 你能告诉我们writeFile
的来源吗?
“发生了什么事?”您没有向我们展示的一些代码正在处理字符串。我们能看看writeFile
做了什么吗?
writeFile 的主体是什么?您是否使用 iostream 写入文件?最后,为什么不使用 const char*?
旁注:您在帖子中遗漏了 "this doesn't compile"。这看起来不像是真正的代码,或者如果是,你忽略了 lot 的警告。您不能将 const char*
传递给以非常量 unsigned char*
作为参数的函数。不是没有你的编译器试图伸出手打你一巴掌。
它确实可以编译,否则我无法测试它。我发布了一些函数here 来给出一个想法。
【参考方案1】:
我相信您的问题与使用无符号字符有关,当我将它放入我的代码中时,它会在编译时抱怨它。这可能与 unsigned char 无法使用像 \n
这样的转义字符有关,但我不能确定。
IntelliSense: argument of type "const char *" is incompatible with parameter of type "unsigned char *"
是我得到的编译错误。
当我将其更改为仅作为常规 char *
作为参数时,它运行良好。
【讨论】:
这是 C++。如果您的编译器有任何金属,它仍然应该警告您将const char*
作为char*
参数传递。但这个思路的总体方向是正确的。
文件名没有转义字符。无论如何,即使我不在数据中使用转义字符也会发生这种情况。
是的,它确实警告我将 const char* 作为 char* 传递。顺便说一下 Atmel Studio 6。以上是关于c ++将带引号的字符串作为char数组传递给函数的主要内容,如果未能解决你的问题,请参考以下文章