gpt4 book ai didi

linux - (char)NULL , '\0' 和 0 在 C 的 memset 中都表示相同的东西吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:02 24 4
gpt4 key购买 nike

我们正在将 32 位应用程序从 rhel 5.3 迁移到 6.4

我们在新系统的 memset 上收到警告“Cast from pointer to integer of different size”。

(char)NULL, '\0'0 在 C 的 memset 中都是同一个意思吗?

以下代码在新环境中发出警告。

#define NULLC  (char)NULL
#define MAX_LEN 11

memset(process_name, NULLC, MAX_LEN + 1);
strncpy(process_name, "oreo", MAX_LEN);

最佳答案

do not 都表示同一件事,尽管它们可能会产生相同的结果。

(char)NULLNULL 的值(实现定义的空指针常量)转换为 charNULL 的类型可以是 intvoid* 或其他一些整数类型。如果它是整数类型,则转换定义明确并产生 0。如果它是 void*,则您正在将 空指针 值转换为 char,它具有实现定义的结果(这很可能,但是不保证,为 0)。

NULL 旨在引用一个空的指针值,而不是一个空的字符,这是一个非常不同的东西。

您的宏 NULLC 不是特别有用。如果要引用空字符,只需使用文字常量 '\0'。 (并且 NULLC 恕我直言,很容易与 NULL 混淆。)

另外两个常量,'\0'0,具有完全相同的类型 (int) 和值(零)。

(不可否认,'\0' 的类型是 int 而不是 char,这是违反直觉的。由于历史原因,它是这样的,而且很少很重要。在 C++ 中,字符常量是 char 类型,但你问的是 C。)

关于linux - (char)NULL , '\0' 和 0 在 C 的 memset 中都表示相同的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17664852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com