"\ 0"和"\ 0"之间的区别

Fer*_*rmi 7 c null-character

我试图理解下面的一段代码,但我"\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'.


unw*_*ind 8

双引号创建字符串文字.所以"\0"是一个字符串文字,包含单个字符'\0',另外还有第二个字符作为终止符.写一个空字符串""是一种愚蠢的方式(这是惯用的方式).

单引号用于字符文字,因此'\0'int表示编码值为0的字符的大小值.

代码中的Nits:

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


Lun*_*din 6

\0 是null终止符.

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

这条线if (str_temp=='\0')是废话,应该是if (str_temp==NULL).现在它发生了,\0相当于0,这是一个空指针常量,所以代码工作,运气好.

strlen一个字符串,\0第一个字符不是很有意义.你将得到字符串长度为零.