在我的程序中,我使用 malloc 将动态内存分配给“char *”类型的变量缓冲区。然后,如果我使用strtok(buffer,"+");
它会给出分段错误。我得到了这个Stackoverflow和同样问题Stackoverflow的原因。但两个帖子都没有给我想要的解决方案。因为我不能根据我的程序使用静态内存或数组类型。
我的问题是在 strtok 中,如果我使用 char 数组然后工作正常,而当使用 char * 时会给出错误。如何在 strtok 争论中使用 char *。
char *buffer;
int len;
connection_t * conn;
long addr = 0;
FILE *fptr;
if (!ptr) pthread_exit(0);
conn = (connection_t *)ptr;
const char *s = "+";
char *token;
/* read length of message */
read(conn->sock, &len, sizeof(int));
if (len > 0)
{
addr = (long)((struct sockaddr_in *)&conn->address)->sin_addr.s_addr;
buffer = (char *)malloc((len+1)*sizeof(char));
buffer[len] = 0;
/* read message */
read(conn->sock, buffer, len);
printf("%s and %d \n",buffer, addr);
/* get the first token */
token = strtok(buffer,"+");
最后一行显示分段错误