#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *str="[03:39.68][02:39.34][01:10.71]愛能不能永遠單純沒有悲哀";
char *time_buf[5]={NULL};
static int i=0,j;
char s[200]="";
while(*str=='[')
{
sscanf(str,"[%[^]]",s);
// printf("%s\n",s);
time_buf[i]=s;
i++;
str=str+10;
}
for(j=0;j<i;j++)
{
puts(time_buf[j]);
}
printf("str=%s\n",str);
return 0;
}
你這句不對time_buf[i]=s;
你這樣表示time_buf的每個元素都指向了s(相當於前3個元素指向的是同一個s,樓主打印地址就能驗證)
後面調用的sscanf(str,"[%[^]]",s);會影響到前面的,所以打印出來的都是最後的01:10.71
要為每個元素都分配不同的空間才行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *str = "[03:39.68][02:39.34][01:10.71]愛能不能永遠單純沒有悲哀";
char *time_buf[5] = { NULL };
static int i = 0, j;
char s[200] = "";
while (*str == '[')
{
sscanf(str, "[%[^]]", s);
// printf("%s\n",s);
time_buf[i] = (char *)malloc(sizeof(char) * 200);
strcpy(time_buf[i], s);
i++;
str = str + 10;
}
for (j = 0; j<i; j++)
{
puts(time_buf[j]);
}
printf("str=%s\n", str);
return 0;
}