【问题标题】:in C can i do write(&'\n', 1) where write(char[], int)在 C 中我可以写(&'\n', 1) where write(char[], int)
【发布时间】:2012-09-13 12:32:51
【问题描述】:

可以吗

write(&'\n', 1); 

是否等价于

char a = '\n';
write(&a, 1);

你会如何以时尚的方式解决这个问题?

我正在尝试使用仅将 char 数组作为第一个参数的函数编写换行符,并在第二个参数中指定其维度(必须指定维度,因为 \0 是有效的可写字符)

【问题讨论】:

  • 你想用这个做什么?
  • 解决什么?不,您不能获取字符文字的地址。
  • 穿紧身连衣裙漫步在时装秀上?很难知道你在问什么。
  • 编辑添加更有用的解释
  • 一个字符文字(例如'a''\t')被评估为该字符的ascii值,所以你不能使用&'a',因为它就像写&95

标签: c coding-style


【解决方案1】:

正如其他人已经指出的那样,您不能获取字符文字的地址。

即使可以,它也会是错误的类型,因为字符数组通常必须以零结尾。

你要找的是:

写("\n", 1);

【讨论】:

  • 它不必以零结尾,因为我指定了数组的长度,因为 \0 是要写入的有效字符(我知道,可能 write() 的作者应该有使用 byte[] 代替 char[])
  • 你是对的,在纯c中应该是uint8_t[],但是库代码是Wiring
  • @lesto:这就是我写“通常”的原因:您没有提供详细信息,而且作为一项规则,我在使用 API 时不会假设。 ;-)
【解决方案2】:

您不能获取字符文字地址的原因是因为编译器实际上将其替换为字符的实际 ASCII 值,在本例中为 10。所以您的代码实际上是:

write(&10, 1);

您不能获取数字文字的地址,因为它很可能不存储在内存中,而是实际生成的代码的一部分。

【讨论】:

  • 好的,我理解你的解释,这似乎是正确的答案。我只是想在一行中“浓缩”代码char a = '\n'; write(&a, 1);
【解决方案3】:

你可以这样做:

write("\n", 1); 

【讨论】:

  • 这似乎是一个不错的解决方案,但也许编译器在这里做了一些奇怪的事情?比如在 '\n' 中改变 "\n" ...
【解决方案4】:

你要问的是两个不同的东西:

'\n' 是字符文字,将被视为整数文字。

char a 是一个字符变量。

您可以获得变量的地址,而不是文字。

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 2013-08-22
    • 2016-06-29
    • 2015-04-12
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多