"\0" 和 '\0' 的区别

difference between "\0" and '\0'

我试图理解以下代码,但我对 "[=11=]"'[=12=]' 感到困惑。我知道这很愚蠢,但请帮助我

   #define MAX_HISTORY 20

   char *pStr = "[=10=]";
   for(x=0;x<MAX_HISTORY;x++){
        str_temp = (char *)malloc((strlen(pStr)+1)*sizeof(char));
        if (str_temp=='[=10=]'){
            return 1;
    }
    memset(str_temp, '[=10=]', strlen(pStr) );
    strcpy(str_temp, pStr);

它们是不同的。

"[=11=]" 是一个字符串文字,它有两个连续的 0,大致等同于:

const char a[2] = { '[=10=]', '[=10=]' };

'[=12=]' 是一个值为 0 的 int。您可以在任何需要使用 '[=12=]'.

的地方始终为 0

[=10=] 是空终止符。

"[=11=]" 等同于 {'[=12=]', '[=12=]'}。这是一个困惑的程序员编写的字符串,他不明白字符串文字总是自动以 null 终止。正确编写的代码应该是 "".

if (str_temp=='[=14=]')行是废话,应该是if (str_temp==NULL)。现在碰巧,[=10=] 等价于 0,这是一个空指针常量,所以代码可以运行,很幸运。

strlen 一个字符串,其中 [=10=] 是第一个字符不是很有意义。您将得到字符串长度为零。

双引号创建字符串文字。所以 "[=10=]" 是一个字符串文字,包含单个字符 '[=11=]',加上第二个字​​符作为终止符。写一个空字符串是一种愚蠢的方式("" 是惯用的方式)。

单引号用于字符文字,因此 '[=11=]' 是一个 int 大小的值,表示编码值为 0 的字符。

代码中的尼特:

  • 不要在 C 中转换 malloc() 的 return 值。
  • 不要按 sizeof (char) 缩放分配,它始终为 1,因此不会增加任何价值。
  • 指针不是整数,您通常应该与 NULL 进行比较。
  • 代码的整个结构没有意义,循环中有一个分配但指针被丢弃,泄漏了大量内存。