gpt4 book ai didi

C strtok 没有按照我的意愿进行解析

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:26 25 4
gpt4 key购买 nike

*id 值最初是 0000-0000:c29302。一旦它通过 split 函数发送,它的值就会更改为 0000-0000。我认为这与修改原始值而不是修改临时值有关。我希望 *id 值保持不变。谢谢。

typedef struct node {
char *id;
char *clientid;
char *token;
struct node * next;
} credentials;

void split(credentials * head, char delim[]);

int main()
{
credentials * head = NULL;
head = malloc(sizeof(credentials));

head->id = strdup("0000-0000:c29302");
head->clientid = NULL;
head->token = NULL;
head->next = NULL;
split(head, ":");
print_list(head);
}

void split(credentials * head, char *delim)
{
char *token;
char *temp;
credentials * current = head;
while (current != NULL) {
temp = current->id;
int tempNum = 0;
token = strtok(temp, delim);
current->clientid = token;
while(token != NULL)
{
if(tempNum == 0)
{
current->clientid = token;
} else {
current->token = token;
}
token = strtok(NULL, delim);
tempNum++;
}
current = current->next;
}
}

最佳答案

来自 man strtok:

If a delimiter byte is found, it is overwritten with a null byte to terminate the current token, [...]

如果您不想修改您的字符串,您需要编写您自己的字符串标记化函数或使用您的字符串的副本。


请注意,如果您继续使用 strtok(使用您的字符串的副本),请记住 strtok 返回的标记不是新字符串。它们是指向您正在使用的字符串中的点的指针。这意味着当您释放该字符串时,所有标记都会同时释放。

关于C strtok 没有按照我的意愿进行解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49341847/

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