我试图理解下面的代码,但是我对"\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',外加第二个字符作为终止符。这是一种写空字符串的愚蠢方式(""是惯用方式)。

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

代码中的Nits:

  • 不要在C中强制转换malloc()的返回值。
  • 请勿按sizeof (char)缩放分配,该分配始终为1,因此不会增加任何值。
  • 指针不是整数,通常应将其与NULL进行比较。
  • 代码的整个结构没有意义,循环中有一个分配,但是指针被扔掉了,从而浪费了大量内存。
  • 关于c - "\0"和 '\0'之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40129319/

    10-11 21:12