gpt4 book ai didi

从 strtok 复制字符串

转载 作者:行者123 更新时间:2023-12-02 08:53:27 27 4
gpt4 key购买 nike

我需要将 C 字符串划分为标记。我认为 strtok 将是我最好的尝试,但我得到了非常奇怪的结果......

这是我的测试程序。在这个例子中,我将得到 3 个带有“##”分隔符的 token ,但是当我尝试使用我应该复制的 token 时,只有第三个 token 正确显示。另外两个看起来已损坏或其他东西......我不知道不知道...?

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

#define TAM 3 //elements

char** aTokens(char* str, char* delimitador)
{
char* pch;
char** tokens;
int i = 0;
tokens = (char**)malloc(sizeof(char*)*TAM);

pch = strtok(str, delimitador);

while(pch != NULL)
{
tokens[i] = (char*)malloc((sizeof(strlen(pch))+1) * sizeof(char));
strcpy(tokens[i], pch);
pch = strtok(NULL, delimitador);
i++;
}

return tokens;
}

int main ()
{
char str[] = "30117700,1,TITULAR,SIGQAA070,1977/11/30,M,1,14000,0.00,6600.00,10.00,2011/09/01,2012/09/01,0|17,0.00,NO,0,0,0.00, ,##30117700,1,TITULAR,SIGQAA070,1977/11/30,M,1,14000,0.00,6600.00,10.00,2011/09/01,2012/09/01,0|17,0.00,NO,0,0,0.00, ,##30117700,1,TITULAR,SIGQAA070,1977/11/30,M,1,14000,0.00,6600.00,10.00,2011/09/01,2012/09/01,0|17,0.00,NO,0,0,0.00, ,";

char** tokens;
int i;

tokens = aTokens(str, "##");

for(i = 0; i<TAM; i++)
printf("%d -- %s\n", strlen(tokens[i]), tokens[i]);

//Clean
//for(i = 0; i<TAM; i++)
//free(tokens[i]);

//free(tokens);

return 0;
}

在 Linux 上使用 GCC 输出:

13 -- 30117700,1,T   <---- ?
13 -- 30117700,1,T <----- ?
115 -- 30117700,1,TITULAR,SIGQAA070,1977/11/30,M,1,14000,0.00,6600.00,10.00,2011/09/01,2012/09/01,0|17,0.00,NO,0,0,0.00, ,

我评论了“干净”部分,因为它也提供了很多运行时错误......:(

请帮忙!!

最佳答案

我认为您对 strtok 的工作原理有些困惑。

在大多数情况下,您是对的。然而,赋予 strtok 的分隔符字符串本身并不用作字符串,而是更像字符数组,而 strtok 只关心这些单独的人物。因此,使用字符串“#”调用 strtok 与使用“##”完全相同。为了正确标记字符串,您需要决定使用单个分隔符,或使用可以处理多字符分隔符的不同(可能是自定义)标记器函数。

关于从 strtok 复制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6820943/

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