另一个链接的问题是在使用strcpy()时出现细分错误吗?
我有一个结构:
struct thread_data{ char *incall[10]; int syscall arg_no; int client_socket; };
如何初始化指向上述类型结构的指针,以及如何初始化指向结构内部的10个字符串(incall [])的指针。
我首先初始化字符串,然后初始化结构。
谢谢。
编辑:我猜我用错了字,应该说分配。实际上,我将此结构作为线程的参数传递。线程数不是固定的,作为参数发送的数据结构对于每个线程都必须是唯一的,并且是“线程安全的”,即不能被其他线程更改。
这里的答案来回答这个问题 想 你问:
/** * 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像这样分配字符串:
td->incall
strcpy(td->incall[0], "First string"); strcpy(td->incall[1], "Second string");
理想情况下,您要检查每个结果,malloc以确保它们成功后再进行下一件事。
malloc