使用memset将struct sockaddr_in设置为0和'\ 0'之间有什么区别?

时间:2017-10-01 01:26:21

标签: c

我刚刚开始使用C套接字编程。我已经读过0作为整数常量,当与指针比较时引用空指针而'\ 0'指的是空字符,将所有位设置为0.并且,在我的问题的情况下,我知道我应该使用'\ 0'。但我可以看到许多使用0的实现。这样会有什么不同? 我不想做任何有效的事情。直到我明白为什么,我才能继续前进。 谢谢!

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

它们是等价的。

但是在处理整数时常用0,在处理字符或字节时使用'\0'

int n = 0;
char ch = '\0';

对于指针,请使用NULL宏。

memset有以下原型:

void * memset ( void * ptr, int value, size_t num );

虽然value具有int类型,但它被解释为字节值。所以没有区别。

答案 3 :(得分:2)

在C中,'x'等字符文字的类型为int,这意味着'\0'0不仅在数值上相等,它们在语义上是100%等效的。它们是相同整数常量的两种不同拼写。您只能使用检查令牌拼写的构造来区分差异,例如预处理器的###运算符。

(是的,这意味着'\0'是一个空指针常量。)

答案 4 :(得分:1)

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

printf("%c == %d == %c\n", 'A', 'A', 65);

您会注意到字符'\0'具有整数值0,因此没有区别,您可以在代码中使用0'\0' ,对于编译器来说,它是一回事。 通常情况下,NULL(void *) 0的宏,其中0值已转换为通用指针(它仍然是值0,但它将被解释为指针类型)。