我想了解下面的一段代码,但我在"\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 :(得分:10)
他们是不同的。
"\0"
是一个字符串文字,有两个连续的0&#39;大致相当于:
const char a[2] = { '\0', '\0' };
'\0'
是int
,其值为0.您可以随时随地使用'\0'
。
答案 1 :(得分:8)
双引号创建字符串文字。所以"\0"
是一个字符串文字,包含单个字符'\0'
,加上第二个字符作为终止符。写一个空字符串是一种愚蠢的方式(""
是惯用的方式。)
单引号用于字符文字,因此'\0'
是一个int
大小的值,表示编码值为0的字符。
代码中的Nits:
malloc()
的返回值。sizeof (char)
扩展分配,它始终为1,因此不会增加任何值。NULL
进行比较。答案 2 :(得分:6)
\0
是空终止符。
"\0"
与{'\0', '\0'}
相同。它是由一个混淆的程序员编写的字符串,它不会理解字符串文字总是自动为空终止。正确编写的代码应为""
。
第if (str_temp=='\0')
行是无稽之谈,应该是if (str_temp==NULL)
。现在,\0
相当于0,这是一个空指针常量,所以代码运行良好。
取strlen
字符串\0
是第一个字符并不是很有意义。你将得到字符串长度为零。