字符串标记化在读取整个字符串之前终止
Posted
技术标签:
【中文标题】字符串标记化在读取整个字符串之前终止【英文标题】:String tokenization terminates before reading the entire string 【发布时间】:2022-01-16 07:31:42 【问题描述】:我一直在尝试用空格字符分割字符串。字符串的格式为a, b
,我需要将其拆分为a
和b
。我写的代码如下,但循环总是在打印最后一个字符之前终止。
void tokenize(char *str)
int i = 0, k = 0;
char *ch = malloc(1000);
printf("%s\n", str);
while(i < strlen(str))
if(str[i] == ' ')
k = 0;
printf("%s", ch);
ch = malloc(1000);
i++;
else if(str[i] == ',')
i++;
else
ch[k++] = str[i++];
输出
q1, q2
q1
从上面的输出可以明显看出,它在打印 q2
之前终止,非常感谢解决此问题的解决方案。
【问题讨论】:
你需要在循环之后打印 ch (一个 \n 可能是个好主意) 谢谢,但是为什么循环在打印之前就终止了? 您在阅读空格时打印,刺痛不是以空格结尾,所以没有打印 【参考方案1】:您需要在循环后打印,因为打印仅在读取空格时完成:
#define STRLEN 1024
void tokenize(const char *str)
int i = 0, k = 0;
free(ch);
char *ch = malloc(STRLEN);
printf("%s\n", str);
while(i < strlen(str))
if(str[i] == ' ')
k = 0;
printf("%s\n", ch);
ch = malloc(STRLEN);
i++;
else if(str[i] == ',')
i++;
else
ch[k++] = str[i++];
printf("%s\n", ch);
free(ch);
【讨论】:
只是好奇如果我添加if(str[i] == ' ' || i == strlen(str) - 1)
解决问题?
它的内存泄漏。在printf()
之后免费ch
。
更新完成,谢谢@H.S.以上是关于字符串标记化在读取整个字符串之前终止的主要内容,如果未能解决你的问题,请参考以下文章
从 MemoryStream 获取子字符串而不将整个流转换为字符串