gpt4 book ai didi

c - strtok() 不考虑后续调用的新 token 值

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

我在 C 语言中使用 strtok() 遇到了这个相当愚蠢的问题。main 中的例程似乎没有处理我更改的 token ,而在 中同样有效sub_routine,其中我唯一不同的是将 token 字符保持在 static 中。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void sub_routine()
{
char str[80] = "This is { some important } website";
char *val = NULL;
val = (char *)malloc(sizeof(char)*255);
strncpy(val, str, sizeof(str));
static char s = '{';
char *token;

/* get the first token */
token = strtok(val, &s);

/* walk through other tokens */
while( token != NULL )
{
printf( " %s\n", token );
s= '}';
token = strtok(NULL, &s);
}
}

int main()
{
char symbol='{';
char *string = NULL;
char *match = NULL;
char ref[255]="Do something here {Do it now}. What now?";

string = (char *)malloc(sizeof(char) * 255);
strncpy(string, ref, sizeof(ref));

match = strtok(string, &symbol);
printf("\n%s", match);
printf("\n%s", string);
if(string!= NULL)
{
symbol = '}';
match= strtok(NULL, &symbol);
printf("\n%s\n", match);
}
sub_routine();
}

有人可以解释一下吗?

最佳答案

strtok 需要一个 string 作为它的第二个参数。在这里,您使用的是指向字符的指针,这是 1/2 正确的。但是,它不是NULL 终止(它不以(char)0 结尾)。重新定义

static char s = '{';

char symbol = '{';

static char *s = "{";

char *symbol = "{";

并将 strtok() 调用中所有出现的 &s&symbol 替换为 s符号,分别。

关于c - strtok() 不考虑后续调用的新 token 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28083812/

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