程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c語言-求教大神!!!!C語言求教為什麼打印出來的都是一樣的

c語言-求教大神!!!!C語言求教為什麼打印出來的都是一樣的

編輯:編程解疑
求教大神!!!!C語言求教為什麼打印出來的都是一樣的
 #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;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved