gpt4 book ai didi

c - strtok() 在 C 中给出段错误

转载 作者:行者123 更新时间:2023-11-30 17:08:33 34 4
gpt4 key购买 nike

我正在尝试解析一个用分号分隔的字符串。前 3 个标记是整数,最后一个标记是字节数组。在我的代码中,一切正常,直到到达我想要解析的第 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 时, token 指向数据中的某个位置。

这是不允许的;您需要使用 memmove 或 anther 函数调用来代替。

关于c - strtok() 在 C 中给出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598480/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com