我们正在将32位应用程序从RHEL 5.3迁移到6.4
我们在新系统的memset上收到一个警告“从指针转换到不同大小的整数”。
(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);

最佳答案

虽然它们可能产生相同的结果,但并不都意味着相同的事情。
(char)NULL将实现定义的空指针常量NULL的值转换为charNULL的类型可以是intvoid*或其他整数类型。如果它是整数类型,则转换定义良好,并产生0。如果是void*,则将空指针值转换为char,它有一个实现定义的结果(很可能但不能保证为0)。
NULL是指一个空指针值,而不是一个空字符,这是一个非常不同的东西。
NULLC不是特别有用。如果要引用空字符,只需使用文本常量'\0'。(而且NULLC很容易与NULL混淆)
另外两个常量'\0'0具有完全相同的类型(int)和值(零)。
(不可否认的是,'\0'具有int类型,而不是char。这是因为历史原因,很少有关系。在C++中,字符常量属于“cc>类型,但您询问C”。

08-06 04:38