我试图理解下面的一段代码,但我"\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);
Run Code Online (Sandbox Code Playgroud)
usr*_*usr 10
它们是不同的.
"\0" 是一个字符串文字,有两个连续的0,大致相当于:
const char a[2] = { '\0', '\0' };
Run Code Online (Sandbox Code Playgroud)
'\0'是一个int值为0.您可以随时随地使用0 '\0'.
双引号创建字符串文字.所以"\0"是一个字符串文字,包含单个字符'\0',另外还有第二个字符作为终止符.写一个空字符串""是一种愚蠢的方式(这是惯用的方式).
单引号用于字符文字,因此'\0'是int表示编码值为0的字符的大小值.
代码中的Nits:
malloc()在C中转换返回值.sizeof (char),它始终为1,因此不会增加任何值.NULL通常比较.\0 是null终止符.
"\0"是一样的{'\0', '\0'}.它是由一个混淆的程序员编写的字符串,他不理解字符串文字总是自动为空终止.编写正确的代码本来就是"".
这条线if (str_temp=='\0')是废话,应该是if (str_temp==NULL).现在它发生了,\0相当于0,这是一个空指针常量,所以代码工作,运气好.
取strlen一个字符串,\0第一个字符不是很有意义.你将得到字符串长度为零.