一尘不染

初始化指向结构的指针

linux

另一个链接的问题是在使用strcpy()时出现细分错误吗?

我有一个结构:

struct thread_data{    
    char *incall[10];
    int syscall arg_no;    
    int client_socket;
 };

如何初始化指向上述类型结构的指针,以及如何初始化指向结构内部的10个字符串(incall [])的指针。

我首先初始化字符串,然后初始化结构。

谢谢。

编辑:我猜我用错了字,应该说分配。实际上,我将此结构作为线程的参数传递。线程数不是固定的,作为参数发送的数据结构对于每个线程都必须是唯一的,并且是“线程安全的”,即不能被其他线程更改。


阅读 248

收藏
2020-06-07

共1个答案

一尘不染

这里的答案来回答这个问题 你问:

/**
 * Allocate the struct.
 */
struct thread_data *td = malloc(sizeof *td);

/**
 * Compute the number of elements in td->incall (assuming you don't
 * want to just hardcode 10 in the following loop)
 */
size_t elements = sizeof td->incall / sizeof td->incall[0];

/**
 * Allocate each member of the incall array
 */
for (i = 0; i < elements; i++)
{
  td->incall[i] = malloc(HOWEVER_BIG_THIS_NEEDS_TO_BE);
}

现在,您可以td->incall像这样分配字符串:

strcpy(td->incall[0], "First string");
strcpy(td->incall[1], "Second string");

理想情况下,您要检查每个结果,malloc以确保它们成功后再进行下一件事。

2020-06-07