c-字符串标记化在读取整个字符串之前终止

  • 本文关键字:字符串 终止 读取 c string
  • 更新时间 :
  • 英文 :


我一直在尝试用空白字符分割字符串。字符串的格式是a, b,我需要将其拆分为ab。我写的代码如下,但循环总是在打印最后一个字符之前终止。

void tokenize(char *str)
{
int i = 0, k = 0;
char *ch = malloc(1000);
printf("%sn", 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之前终止,解决这个问题的解决方案值得赞赏。

您需要在循环后打印,因为打印仅在读取空格时完成:

#define STRLEN 1024
void tokenize(const char *str)
{
int i = 0, k = 0;
free(ch);
char *ch = malloc(STRLEN);
printf("%sn", str);
while(i < strlen(str))
{
if(str[i] == ' ')
{
k = 0;
printf("%sn", ch);
ch = malloc(STRLEN);
i++;
}
else if(str[i] == ',')
i++;
else
{
ch[k++] = str[i++];
}
}
printf("%sn", ch);
free(ch);
}

最新更新