繁体   English   中英

strtok()在C中给出分段错误

[英]strtok() giving segmentation fault in C

我正在尝试解析由分号分隔的字符串。 前三个令牌是整数,最后一个令牌是字节数组。 在我的代码中,一切正常,直到我到达要解析的第97个字符串,但出现分段错误。 我意识到在第97个字符串中,尽管fread()返回读取的1024个字节,但从文件读取的字节为空白。 但是,即使读取的字节看起来是空白的,当我将所有读取的字节立即写入文件时,该文件也可以正常工作。 当最后一个标记为空白时,如何解决解析字符串的问题? 这是我解析字符串的方式:

void test(){
 struct packetNode *ptr = head;
 char *tokens;


 int s, c, size;
 int i = 0;
 char data[1024];

  while(ptr != NULL){
    memset(&data[0], 0, sizeof(data));
    tokens = strtok(ptr->packet,";");
    s = atoi(tokens);
    tokens = strtok(NULL, ";");
    c =  atoi(tokens);
    tokens = strtok(NULL, ";");
    size = atoi(tokens);
    tokens = strtok(NULL, ";");
    strcpy(data, tokens);

    printf("sequence: %d, checksum: %d, size: %d\n", s,c,size);

    ptr = ptr->next;
   i++;
  }


}

这是我创建字符串的地方:

 //populate initial window of size 100
    FILE *fpNew = fopen("test.jpg", "w");

    for(i = 0; i < 100; i++){
      memset(&data[0], 0, sizeof(data));
      struct packetNode *p; // create packet node
      p = (struct packetNode *)malloc(sizeof(struct packetNode));
      bytes = fread(data, 1, sizeof(data), fp); // read 1024 bytes from file into data buffer
       int b = fwrite(data, 1, bytes, fpNew);

      printf("read: %d\n", bytes);
      memset(&p->packet[0], 0, sizeof(p->packet));
      sprintf(p->packet, "%d;%d;%d;%s", s, 0, numPackets, data); // create packet

      //calculate checksum
      int check = checksum8(p->packet, sizeof(p->packet));
      sprintf(p->packet, "%d;%d;%d;%s", s, check, numPackets, data); //put checksum in packet
      s++; //incremenet sequence number



      if(i == 0){
            head = p;
            tail = p;
            tail->next = NULL;
        }
        else{
            tail->next = p;
            tail = p;
            tail->next = NULL;
        }


    }
  fclose(fp);

在调用strcpy时,令牌指向数据中的位置。

这是不允许的; 您需要改用memmove或anther函数调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM