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数组传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

将带引号的字符串传递给 system() 保持引号不变

C语言小游戏扫雷游戏的实现

php如何将字符串作为变量使用

php如何将字符串作为变量使用

将带撇号的变量传递给 SQL 查询

带有 ggplot2 的标准 eval 没有 `aes_string()`