“\ 0”和“\ 0”之间的区别

我试着理解下面的一段代码,但我在“\ 0”和“\ 0”之间感到困惑。我知道它很傻但很友好地帮助我

#define MAX_HISTORY 20 char *pStr = "\0"; for(x=0;x<MAX_HISTORY;x++){ str_temp = (char *)malloc((strlen(pStr)+1)*sizeof(char)); if (str_temp=='\0'){ return 1; } memset(str_temp, '\0', strlen(pStr) ); strcpy(str_temp, pStr); 

提前致谢

双引号创建字符串文字。 所以"\0"是一个字符串文字,包含单个字符'\0' ,加上第二个作为终结符。 写一个空字符串是一种愚蠢的方式( ""是惯用的方式)。

单引号用于字符文字,因此'\0'是一个int -sized值,表示编码值为0的字符。

代码中的尼特:

  • 不要在C中malloc()的返回值。
  • 不要按sizeof (char)扩展分配,它始终为1,因此它不会添加任何值。
  • 指针不是整数,通常应该与NULL进行比较。
  • 代码的整个结构毫无意义,循环中有一个分配,但指针被抛弃,泄漏了大量内存。

它们是不同的。

"\0"是一个字符串文字,它有两个连续的0,大致相当于:

 const char a[2] = { '\0', '\0' }; 

'\0'是一个值为0的int 。无论何时需要使用'\0'都可以为0。

\0是空终止符。

"\0"{'\0', '\0'} 。 它是由一个混淆的程序员编写的字符串,他不理解字符串文字总是自动为空终止。 正确编写的代码应该是""

if (str_temp=='\0')是无意义的,它应该是if (str_temp==NULL) 。 现在它发生了, \0等于0,这是一个空指针常量,所以代码运行,运气好。

取一个字符串的strlen ,其中\0是第一个字符并不是很有意义。 你将得到字符串长度为零。