|
> chara *str = "aa,bb,cc,,,dd";
>
> をカンマ区切りでそれぞれ別バッファに格納したいのですが
> 普通strtokを使用すれば良いのですが
> カンマの前の文字列がない場合もバッファにNULLを格納したいのですが
> どのように処理していいのかわかりません。
chara ではなく、char ですね。
NULL の代わりに、"" を格納するプログラムを示します。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void buf_add(char **p, const char *s, int len)
{
*p = malloc(len + 1);
if (*p == NULL) puts("out of memory"), exit(1);
memcpy(*p, s, len);
(*p)[len] = '\0';
}
int main(void)
{
char *str = "aa,bb,cc,,,dd";
char *buf[16], *p1, *p2;
int i, n = 0;
for (p1 = str; n < 16 && (p2 = strchr(p1, ',')); p1 = p2 + 1)
buf_add(&buf[n++], p1, p2 - p1);
buf_add(&buf[n++], p1, strlen(p1));
for (i = 0; i < n; i++) printf("buf[%d]='%s'\n", i, buf[i]);
/* for (i = 0; i < n; i++) free(buf[i]); */
return 0;
}
どうしても、NULL にしたいのなら、buf_add() の先頭に
if (len == 0) { *p = NULL; return; }
を追加してください。
|