在 ANSI C 中转换动态分配的任意指针数组

标签 c linux

这个相当简单的片段由一个更大的代码体构成,给出了“警告:赋值从指针生成整数而不进行强制转换[默认启用]”。

为简单起见,我什至将 caddr_t 更改为 char *... 实际上,这是一组动态生成结构的例程的一部分,在本例中创建的数组可能包含指向任意 malloc 结构的任意指针。并省略了 calloc 数组插入的结构。

这就是我在 80 年代实现 OO 的方式,我有很多代码都是以这种方式工作的。

#include    <stdio.h>
#include    <stdlib.h>

int main(int argc, char* argv[]) {
  int n = 10;
  int i;
  char *p;

  p = (char *) calloc(n,sizeof(char *));
  for (i=0; i<n; i++) {p[i] = (char *) NULL;}
}

那么有没有一种简单的方法可以使现代 C 快乐,或者我是否必须使用 -W 开关来告诉它离开而不打扰我?

是的,我更喜欢 C 语言,它的作用类似于一组用于 PDP-11 汇编器的宏 ;-)

最佳答案

如果你想要一个指针数组,你应该将 p 声明为 char ** p

然后要么删除 calloc 之前的强制转换,要么使用 ( char ** ) 进行强制转换

关于在 ANSI C 中转换动态分配的任意指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17331890/

相关文章:

linux - 运行级别 init.d 和 rc.d

c - C strcpy 和 strncpy 组合中的意外结果

c - 向线程发送消息是什么意思?

c struct指针数组分配sigsegv

c - 使用 C 线程进行电梯模拟

c - 在循环中实现函数的参数

c - 将嵌入式可执行二进制文件从 C 程序写入文件

node.js - nodejs - 永远扫描目录以查找新文件

linux - 在 nginx 和 lighttpd 之间,哪个最适合网络应用程序 (SaaS) 的需求,为什么?

linux - 从另一个存储库合并/拉取时强制版本控制不破坏硬链接(hard link)?