Tag: strtok

开发了一种替代方案

我开发了自己的strtok版本。 只是练习指针的使用。 任何人都可以看到任何限制,或者无论如何我可以改进。 void stvstrtok(const char *source, char *dest, const char token) { /* Search for the token. */ int i = 0; while(*source) { *dest++ = *source++; if(*source == token) { source++; } } *dest++ = ‘\0’; } int main(void) { char *long_name = “dog,sat ,on ,the,rug,in ,front,of,the,fire”; char buffer[sizeof(long_name)/sizeof(*long_name)]; stvstrtok(long_name, buffer, ‘,’); printf(“buffer: […]

如何在C中正确使用strtok,以便没有内存泄漏?

我对在C中使用char指针调用strtok时会发生什么感到困惑。我知道它会修改字符串的内容,所以如果我在名为’line’的变量上调用strtok,它的内容将会改变。 假设我遵循以下方法: void function myFunc(char* line) { // get a pointer to the original memory block char* garbageLine = line; // Do some work // Call strtok on ‘line’ multiple times until it returns NULL // Do more work free(garbageLine); } 进一步假设’line’在传递给myFunc之前被malloced。 我应该在使用strtok之后释放原始字符串还是为我们完成工作? 另外,如果’line’没有被malloced并且我尝试使用上面的函数会发生什么? 取而代之的是更安全吗? (假设程序员知道该行未被malloced,则不会免费拨打电话) 调用 char* garbageLine = line; myFunc(line); free(garbageLine); function定义 void […]

为什么要弃用strtok()?

我从很多程序员那里听到,strtok的使用可能在不久的将来被弃用。 有人说它还在。 为什么这是一个糟糕的选择? strtok()在标记给定字符串时效果很好。 它是否必须对时间和空间的复杂性做任何事情? 我在互联网上找到的最佳链接就是这个 。 但这似乎并没有解决我的好奇心。 如果可能,建议任何替代方案。

用于从字符串中提取数字/数字范围的复杂算法

我正在研究一种算法,我正在尝试以下输出: 给定值/输入: char *Var = “1-5,10,12,15-16,25-35,67,69,99-105”; int size = 29; 这里“1-5”表示范围值,即它将被理解为“1,2,3,4,5”,而仅具有“,”的值是单独的值。 我正在编写一种算法,其中结束输出应该是这样的,它将提供完整的输出范围: int list[]=1,2,3,4,5,10,12,15,16,25,26,27,28,29,30,31,32,33,34,35,67,69,99,100,101,102,103,104,105; 如果有人熟悉这个问题,那么帮助将非常感激。 提前致谢! 我的初始代码方法如下: if(NULL != strchr((char *)grp_range, ‘-‘)) { int_u8 delims[] = “-“; result = (int_u8 *)strtok((char *)grp_range, (char *)delims); if(NULL != result) { start_index = strtol((char*)result, (char **)&end_ptr, 10); result = (int_u8 *)strtok(NULL, (char *)delims); } while(NULL != result) { […]

我是否需要释放strtok结果字符串?

或者更确切地说,strtok如何生成它的返回值指向的字符串? 它是否动态分配内存? 我问,因为我不确定是否需要在以下代码中释放令牌: STANDARD_INPUT变量用于退出过程,以防我内存耗尽以进行分配,字符串是测试对象。 int ValidTotal(STANDARD_INPUT, char *str) { char *cutout = NULL, *temp, delim = ‘#’; int i = 0; //Checks the number of ladders in a string, 3 is the required number temp = (char*)calloc(strlen(str),sizeof(char)); if(NULL == temp) Pexit(STANDARD_C); //Exit function, frees the memory given in STANDARD_INPUT(STANDARD_C is defined as the names given […]

C – 确定使用哪个分隔符 – strtok()

假设我正在使用像这样的strtok() .. char *token = strtok(input, “;-/”); 有没有办法找出实际使用哪个令牌? 例如,如果输入是这样的: 你好; 你好吗? /我很好 – 结束 我可以找出每个令牌使用哪个分隔符? 我需要能够输出特定的消息,具体取决于令牌后面的分隔符。

有没有办法在C中计算令牌?

我正在使用strtok将字符串拆分为令牌。 有没有人知道任何实际计算令牌数量的函数? 我有一个命令字符串,我需要拆分它并将参数传递给execve() 。 谢谢! 编辑 execve将参数作为char** ,所以我需要分配一个指针数组。 我不知道有多少分配而不知道有多少令牌。

strtok和内存泄漏

我用strtok()写了一个简单的url解析器。 这是代码 #include #include typedef struct { char *protocol; char *host; int port; char *path; } aUrl; void parse_url(char *url, aUrl *ret) { printf(“Parsing %s\n”, url); char *tmp = (char *)_strdup(url); //char *protocol, *host, *port, *path; int len = 0; // protocol agora eh por exemplo http: ou https: ret->protocol = (char *) strtok(tmp, “/”); […]

如何使用Strtok标记Const char *?

我有一个const char *变量,它可能有一个像“OpenStack:OpenStack1”的值。 我想使用strtok来标记化这个const char *,其中分隔符(它是一个const char *类型)是“:”。 但问题是strtok是以下类型:char * strtok(char * str,const char * delimiters); 这意味着我不能使用const char *作为第一个输入,因为它必须是char *。 你能告诉我如何将这个const char *转换为char *吗? 谢谢。

分解字符串并将其存储在数组中

我想分解一个句子并将每个字符串存储在一个数组中。 这是我的代码: #include #include int main(void) { int i = 0; char* strArray[40]; char* writablestring= “The C Programming Language”; char *token = strtok(writablestring, ” “); while(token != NULL) { strcpy(strArray[i], token); printf(“[%s]\n”, token); token = strtok(NULL, ” “); i++; } return 0; } 它一直给我分段错误,我无法弄明白。 我相信当我将令牌复制到我的arrays时,它有一些事情要做。