在C程序中使用0而不是’�’

为什么我的程序没有进入无限循环。我没有用'�'while 循环测试字符串结尾,而是使用0. 是否'�'0同在C 2

如果是,那么如果0在字符串的中间,那么printf应该在那里结束打印字符串。例如 printf("%s", "hello how0 are you") 应该打印 'hello how'

int main( )
{
    char s[ ] = "No two viruses work similarly" ;
    int i = 0 ;
    while ( s[i] != 0 )
    {
        printf ( "%c", s[i]) ;
        i++ ;
    }
}

回答

'�'与 具有相同的含义0,但'0'与 的含义不同0

printf("%s", "hello how0 are you")将打印hello how0 are you

printf("%s", "hello how� are you")将打印hello how


    回答

    在 C 语言中,'�' 的含义与整数常量 0 完全相同(相同的值零,相同的类型 int)。

    此外,对于阅读代码的人来说,写 '�' 表明您打算使用这个特定的零作为字符(空)。


      回答

      '�'0在 C 中相等,因为 ASCII(ANSI、UTF-8 等)字符编码将字符的代码定义'�'0. 在 C 中,可以将字符隐式转换为整数,生成的整数将等于字符代码(例如,'A'将转换为65)。

      如果您将字符串的一个字符设置为'�'0,它将终止该字符串。

      测试代码(在线):

      #include <stdio.h>
      
      int main() {
          // Are they equal? Yes!
          char zc = '�';
          char zi = 0;
          printf("%dn", zc == zi); // Prints 1
          
          
          // Does setting a char to 0 terminate a string? Yes!
          char s[] = "hello, world";
          printf("%sn", s); // Prints hello, world
          s[5] = 0;
          printf("%sn", s); // Prints hello
          
          return 0;
      }
      

      同样重要的是,字符串文字(如s上面的代码中)会自动具有终止'�'字符,但它不会显示在字符串文字中。

      将内部'�'字符放入字符串文字中可能听起来很愚蠢,因为字符串的长度被定义为第一个之前的字符数'�',而 printf 也只打印这些字符。但是 internal'�'确实在实践中使用,例如在 Windows 上为 Open/Save File 对话框设置文件类型过滤器(link,link)。这里内部零字符用作过滤器分隔符:

      ofn.lpstrFilter = "Text files (*.txt)�*.txt�All files (*.*)�*.*�";
      

        回答

        在 C 源代码中,0'�'实际上是相同的:每个都是int值为零的常量。'�'用于表示我们正在处理字符,但它0与编译器相同。(在 C++ 中,'�'是一个char而不是一个int。)

        显示字符“0”的代码不为零。在 ASCII 中,它是 48。在任何 C 实现中,它都可以写成'0'. 即使 C 实现使用除 ASCII 以外的某些字符编码,此值也将始终为正数而不是零。因此,字符串中间的字符“0”不会充当空终止符。


          回答

          '�' 和 0 在 C 中相同吗?

          是的,它们是编写相同整数常量 0 的不同方式。 C 中的两个常量(与 C++ 相反)具有类型int和相同的表示形式。

          为什么我的程序没有进入无限循环。我没有使用 '�' 来测试 while 循环中的字符串结尾,而是使用了 0

          这个while循环中的条件

          while ( s[i] != 0 )
          
          while ( s[i]
          while ( s[i] != '�' )
          
          while ( s[i] != '�' )
          

          != 0 )

          等价于条件

          正如上面指出的那样。

          如果 0 在字符串的中间,那么 printf 应该在那里结束打印字符串。例如 printf("%s", "hello how0 are you") 应该打印 'hello how'

          这个字符串文字

          "hello how0 are you"
          

          没有嵌入的零字符。这个带有嵌入零字符的字符串可以通过以下方式查找

          "hello how� are you" 
          

            回答

            0并且'�'是相同的,但与其说是这样,不如解释一下这些不同的输入零的方式实际上是什么。

            在 C 中有很多0可以使用整数值的情况。显然,它可以用作普通整数或数组索引。但它也可用于创建空指针。还有一个用途是字符串的空终止。

            由于空指针和字符串的空终止是截然不同的事物,因此混淆术语的风险很大。在黑暗时代的某个时候,通过将空指针称为NULL并创建一个类似命名的宏,扩展为空指针常量来区分。符号表中的字符 0(“空字符”)被称为NUL单个 L。仍然令人困惑。

            此外,C 从未为空终止定义转义序列,就像为换行符n、制表符n等所做的那样。因此,当作为字符串的一部分时,无法输入空终止字符。

            然后有人(Kernighan & Ritchie?)想出了在 C 中使用其他已经存在的转义序列的想法。在字符串或字符文字中,我们可以使用转义序列来键入表中符号的索引。这可以使用八进制或十六进制表示法来完成。

            例如,带有十进制值的换行符10可以在字符串中输入为�12(八进制)或xA(十六进制)。这些被称为八进制/十六进制转义序列。例子:

            puts("testntest�12testxAtest");
            

            test
            test
            test
            test
            

            同样,我们可以使用转义序列编写空字符,八进制或十六进制x0。八进制版本成为空终止的惯例和事实上的标准。


              回答

              '�'值为0的字符。它用于终止 C 中的字符串。所以,是的,循环

              工作得很好,虽然更传统的写作方式是

              强调我们正在处理角色。

              在另一方面,“0”是字符看起来像数字0,虽然这个人物在ASCII字符集为48个,但在任何情况下,值不为0!所以当你写

              printf("%s", "hello how0 are you");
              

              它打印hello how0 are you,因为0是一个普通字符,并且不会终止字符串。如果你写

              printf("%s", "hello how� are you");
              

              那么你会有一个空字符,它终止字符串。


                回答

                0 是字符 '�' 的 ascii 值。0 不是 '0' 字符的 ascii 值。


                  回答

                  我会把它放在评论中,但评论太长了。

                  '�' 和 0 在 C 中是否相同

                  我建议你试试这个:

                  int main( )
                  {
                      char s[ ] = "No two viruses work similarly" ;
                      int i = 0 ;
                      while ( s[i] != 0 )
                      {
                          printf ( "%d", s[i]); // this will print decimal values of
                                                // all characters before `�`
                          ++i;
                      }
                      printf ("%d", s[i]); // this will print decimal value of `�`
                  }
                  

                  你也可以这样做:

                  printf("%dn", '�');
                  

                  它会回答你的第一个问题。

                  如果是,那么如果 0 在字符串的中间,那么 printf 应该在那里结束打印字符串。例如 printf("%s", "hello how0 are you") 应该打印 'hello how'。

                  "" 或 '' 中的 0 被视为 ASCII 字符,因此试试这个:

                  printf("%dn", '0');
                  

                  这应该给你 ASCII 字符“0”的十进制值。并查看 ASCII 字符表。

                  作为有趣的练习,您可以这样做:

                  printf("%dn", '0' - '�');
                  

                    回答

                    在C中,对于每个字符,都有一个对应的ASCII值,基本上是0到127之间的整数。

                    例如,当您声明:

                    char a[] = "Hello";
                    

                    然后,该数组实际上有6 个元素,而不是5 个。您可以使用以下方法对其进行测试:

                    int n = sizeof(s)/sizeof(s[0]);
                    printf("%dn", n);
                    

                    该字符串的实际表示已变为:Hello�

                    在这里,您可以看到符号,它被称为转义字符,类似于该字符的另一种解释。这里表示字符数组索引上的ASCII 值0。但是,没有转义字符,0只是一个普通字符 - 不是替代表示。

                    现在,如果要查看前一个字符串 - Hello中每个字符的相应 ASCII 值,请运行以下命令:

                    int i;
                    for (i = 0; i < 6; i++) {
                        printf("%d ", s[i]);
                    }
                    
                    // Output: 72 101 108 108 111 0 
                    

                    现在关于你的原始问题:

                    '�' 和 0 在 C 中相同吗?

                    ASCII 0和 char 0是不同的。但字符 0表示ASCII值0


                      以上是在C程序中使用0而不是’�’的全部内容。
                      THE END
                      分享
                      二维码
                      < <上一篇
                      下一篇>>