如果我需要null终止一个字符串,我应该使用\0
还是一个简单的0
呢?
使用
之间有什么区别吗?char a[5];
a[0] = 0;
和
char a[5];
a[0] = '\0';
或者\0
是否更愿意明确表示我在此处终止,但对于编译器来说它是相同的?
答案 0 :(得分:15)
object ImplicitConversion {
case class MainClass (txid: String,hat: Hat,version: Int,bot: Bot, time: Int, locktime: Int)
case class Hat (value: Float,n: Int,nxt: Nxt)
case class Nxt (typetx: String,reqsigs: Int,addresses: List[Address])
case class Bot (base: String,sequence: Int)
case class Address (address: String)
// implicit conversion with argonaut
implicit def MainClassEncodeJson: EncodeJson[MainClass] =
EncodeJson((m: MainClass) =>
("txid" := m.txid) ->:
("hat" := Json (
("value" := m.hat.value),
("n" := m.hat.n),
("nxt" := Json (
("typetx" := m.hat.nxt.typetx),
("reqsigs" := m.hat.nxt.reqsigs),
("addresses" := m.hat.nxt.addresses)
)
) ->: jEmptyObject
)
) ->: jEmptyObject
("version" := m.version) ->:
("bot" := Json (
("base" := m.bot.base)
("sequence" := m.bot.sequence)
)
) ->: jEmptyObject
("time" := m.time) ->:
("locktime" := m.locktime) ->:
)
implicit def MainClassDecodeJson: DecodeJson[MainClass] =
DecodeJson(c => for {
txid <- (c --\ "txid").as[String]
hat <- (c --\ "hat").as[Json]
version <- (c --\ "version").as[Int]
bot <- (c --\ "bot").as[Json]
time <- (c --\ "time").as[Int]
locktime <- (c --\ "locktime").as[Int]
// extract data from hat
value <- (hat.acursor --\ "value").as[Float]
n <- (hat.acursor --\ "n").as[Int]
nxt <- (hat.acursor --\ "nxt").as[Json]
// extract data from nxt
typetx <- (nxt.acursor --\ "typetx").as[String]
reqsigs <- (nxt.acursor --\ "reqsigs").as[Int]
addresses <- (nxt.acursor --\ "addresses").as[List[Address]]
// extract data from bot
base <- (bot.acursor --\ "base").as[String]
sequence <- (bot.acursor --\ "sequence").as[Int]
} yield MainClass(txid, hat(value, n, Nxt(typetx, reqsigs, addresses)),
version, Bot(base, sequence), time, locktime)
}
是escape sequence的octal literal,其值为0.所以它们之间没有区别
旁注:如果您处理的是字符串,则应使用std::string
。
答案 1 :(得分:8)
'\0'
与0
完全相同,尽管类型如此。 '\0'
只是char
字面的表示。类型char
可以从普通int
文字初始化。
因此,实际上不可能分辨出更好的内容,请记住在代码中始终如一地使用它。
答案 2 :(得分:8)
使用&#39; \ 0&#39;或只是0?
价值没有差异
在C中,类型没有区别:两者都是int
在C ++中,它们有不同的类型:char
和int
。因此,边缘转到'\0'
,因为不涉及类型转换。
不同的风格指南促进了另一个。 '\0'
为清楚起见。 0
因为没有混乱。
正确答案:根据您的群组编码标准/指南使用该样式。如果你的小组没有这样的指导,那就做一个。最好使用一种而不是有不同的风格。
答案 3 :(得分:6)
两者都会生成相同的机器代码,因为0
将转换为字符值0
,而'\0'
只是另一种编写字符值0
的方式。后者显然是一个角色,所以它会表明你并没有意外地写'0'
,而是除此之外,它最终完全相同。
答案 4 :(得分:1)
它是一回事。看看ascii表。
从我的观点来看,使用&#39; \ 0&#39;因为你明确地说了字符串的结尾。
当您读取代码时(例如,将NULL用于指针而不是0),这会有所帮助。