“\ 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
是第一个字符并不是很有意义。 你将得到字符串长度为零。