Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将结构sockaddr_设置为0和使用memset将“\0”之间有什么区别?_C - Fatal编程技术网

将结构sockaddr_设置为0和使用memset将“\0”之间有什么区别?

将结构sockaddr_设置为0和使用memset将“\0”之间有什么区别?,c,C,我刚刚开始C套接字编程。我读到0是一个整数常量,当与指针比较时,它表示一个空指针,“\0”表示一个空字符,它将所有位设置为0。关于我的问题,我知道我应该使用“\0”。但我可以看到许多使用0的实现。这样的区别是什么? 我不想做任何有用的事。在我明白原因之前,我不能继续前进。 谢谢 没有区别。它们是相等的。没有区别。他们是平等的。绝对没有区别。请使用0,因为您将内存归零,并且不希望像将字符数组的任一元素与“\0”进行比较时那样强调内存的任何性质,以表示您正在查找空字符 更准确地说,“”是一个表达式,

我刚刚开始C套接字编程。我读到0是一个整数常量,当与指针比较时,它表示一个空指针,“\0”表示一个空字符,它将所有位设置为0。关于我的问题,我知道我应该使用“\0”。但我可以看到许多使用0的实现。这样的区别是什么? 我不想做任何有用的事。在我明白原因之前,我不能继续前进。
谢谢

没有区别。它们是相等的。

没有区别。他们是平等的。

绝对没有区别。请使用0,因为您将内存归零,并且不希望像将字符数组的任一元素与“\0”进行比较时那样强调内存的任何性质,以表示您正在查找空字符


更准确地说,“”是一个表达式,它给出了一个与指定字符相对应的整数常量。在这种特殊情况下,“\0”的计算结果为相同的整数-0。所以,没有区别。

绝对没有区别。请使用0,因为您将内存归零,并且不希望像将字符数组的任一元素与“\0”进行比较时那样强调内存的任何性质,以表示您正在查找空字符

更准确地说,“”是一个表达式,它给出了一个与指定字符相对应的整数常量。在这种特殊情况下,“\0”的计算结果为相同的整数-0。所以,没有区别。

它们是等价的

但在处理整数时通常使用0,在处理字符或字节时通常使用“\0”:

int n = 0;
char ch = '\0';
对于指针,使用NULL宏

memset有以下原型:

void * memset ( void * ptr, int value, size_t num );
尽管值具有int类型,但它被解释为字节值。所以没有区别。

它们是等价的

但在处理整数时通常使用0,在处理字符或字节时通常使用“\0”:

int n = 0;
char ch = '\0';
对于指针,使用NULL宏

memset有以下原型:

void * memset ( void * ptr, int value, size_t num );
尽管值具有int类型,但它被解释为字节值。所以没有区别。

char是一种整数类型,这意味着可以与简单引号(如“a”)一起使用的字符实际上是整数值。我邀请您查找ascii,您将看到字符和整数之间的链接。 您可以使用printf进行一些简单的测试:

您会注意到字符“\0”的整数值为0,因此没有区别,您可以在代码中使用0或“\0”,对于编译器来说,这是一样的。 通常,NULL是void*0的宏,它是转换到泛型指针中的值0。它仍然是值0,但它将被解释为指针类型

char是一种整数类型,这意味着可以与简单引号(如“a”)一起使用的字符实际上是整数值。我邀请您查找ascii,您将看到字符和整数之间的链接。 您可以使用printf进行一些简单的测试:

您会注意到字符“\0”的整数值为0,因此没有区别,您可以在代码中使用0或“\0”,对于编译器来说,这是一样的。
通常,NULL是void*0的宏,它是转换到泛型指针中的值0。它仍然是值0,但它将被解释为指针类型

在C语言中,像“x”这样的字符文字具有int类型,这意味着“\0”和0不仅在数字上相等,而且在语义上100%相等。它们是相同整数常量的两种不同拼写。只能使用检查标记拼写的构造(如预处理器和运算符)来区分差异


是的,这意味着“\0”是一个空指针常量。

在C语言中,“x”等字符文字的类型为int,这意味着“\0”和0不仅在数字上相等,而且在语义上100%相等。它们是相同整数常量的两种不同拼写。只能使用检查标记拼写的构造(如预处理器和运算符)来区分差异


是,这意味着“\0”是一个空指针常量。

好的。谢谢嗯,但是0和'\0'本质上是不同的,对吗?能不能简单解释一下为什么他们在这里是平等的?他们总是平等的。这只是表示相同内容的另一种方式,因此可以在字符串文本中使用它,如:char c[]=a\0b\0c;。您可以像char c[]={'a',0',b',0',c'}那样编写它。它将完全相同。字符“0”是整数48。而字符“\0”是整数0.0。谢谢嗯,但是0和'\0'本质上是不同的,对吗?能不能简单解释一下为什么他们在这里是平等的?他们总是平等的。这只是表示同一事物的另一种方式,因此您可以在
类似这样的字符串文字:char c[]=a\0b\0c;。您可以像char c[]={'a',0',b',0',c'}那样编写它。它将完全相同。字符“0”是整数48。而字符“\0”是整数0。的可能重复