空终止字符串:使用' \ 0'还是只是0?

时间:2016-03-02 12:49:08

标签: c++ c null-terminated

如果我需要null终止一个字符串,我应该使用\0还是一个简单的0呢?

使用

之间有什么区别吗?
char a[5];
a[0] = 0;

char a[5];
a[0] = '\0';

或者\0是否更愿意明确表示我在此处终止,但对于编译器来说它是相同的?

5 个答案:

答案 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 sequenceoctal literal,其值为0.所以它们之间没有区别

旁注:如果您处理的是字符串,则应使用std::string

答案 1 :(得分:8)

'\0'0完全相同,尽管类型如此。 '\0'只是char字面的表示。类型char可以从普通int文字初始化。

因此,实际上不可能分辨出更好的内容,请记住在代码中始终如一地使用它。

答案 2 :(得分:8)

  

使用&#39; \ 0&#39;或只是0?

价值没有差异 在C中,类型没有区别:两者都是int 在C ++中,它们有不同的类型:charint。因此,边缘转到'\0',因为不涉及类型转换。

不同的风格指南促进了另一个。 '\0'为清楚起见。 0因为没有混乱。

正确答案:根据您的群组编码标准/指南使用该样式。如果你的小组没有这样的指导,那就做一个。最好使用一种而不是有不同的风格。

答案 3 :(得分:6)

两者都会生成相同的机器代码,因为0将转换为字符值0,而'\0'只是另一种编写字符值0的方式。后者显然是一个角色,所以它会表明你并没有意外地写'0',而是除此之外,它最终完全相同。

答案 4 :(得分:1)

它是一回事。看看ascii表。

从我的观点来看,使用&#39; \ 0&#39;因为你明确地说了字符串的结尾。

当您读取代码时(例如,将NULL用于指针而不是0),这会有所帮助。